[Vm-dev] Re: [squeak-dev] Re: Socket clock rollover issues

John M McIntosh johnmci at smalltalkconsulting.com
Wed May 6 05:16:19 UTC 2009

On 5-May-09, at 7:09 PM, Andreas Raab wrote:

> Yes. I don't think that's the problem. Right now my theory is that  
> we're indeed overflowing the VMs semaphore buffer because a Python  
> callout may take a long, long time. I think what happens then might  
> be that over the period of time the (few) sockets generate multiple  
> semaphore signals which overflows the VMs buffer and then there is  
> no room left in the buffer when the callback executes.

Well given the
	if (foo->semaphoresUseBufferA) {
		if (foo->semaphoresToSignalCountA < SemaphoresToSignalSize) {
			foo->semaphoresToSignalCountA += 1;
			foo->semaphoresToSignalA[foo->semaphoresToSignalCountA] = index;
	} else {
		if (foo->semaphoresToSignalCountB < SemaphoresToSignalSize) {
			foo->semaphoresToSignalCountB += 1;
			foo->semaphoresToSignalB[foo->semaphoresToSignalCountB] = index;

You could just code up the else to print diagnostic data when the foo- 
 >semaphoresToSignalCountA IS = to SemaphoresToSignalSize

Also in checkForInterrupts at

	foo->semaphoresUseBufferA = !foo->semaphoresUseBufferA;

is there exposure on multi-cpu machines for semaphoresUseBufferA to be  
NOTed as it's evaluating "if (foo->semaphoresUseBufferA)"
Oh likely there is...  maybe we need a volatile on the  
semaphoresUseBufferA ? But I'm not sure that will work since this the  
traditional race condition on a
shared memory location between two cpus. '

> If that's true then I should be able to recreate the problem by  
> calling an OS-level sleep() function via FFI (i.e., block the main  
> interpreter loop) while performing heavy network activity and see if  
> that overflows the VMs buffer.
> And if that's indeed the case then I think there are two actions to  
> take: One is to fix the Windows sockets code to not do that ;-)  
> (i.e., not signal an already signaled semaphore a gazillion times)  
> but also to keep track of the number of signals on a particular  
> semaphore instead of keeping an entry in the buffer each time the  
> semaphore is signaled (which would completely solve this type of  
> problem in general).

John M. McIntosh <johnmci at smalltalkconsulting.com>   Twitter:   
Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com

More information about the Vm-dev mailing list