On 12.07.2011 13:38, Sven Van Caekenberghe wrote:
Hi All,

I encountered something that I do not understand. I tried this in 1.2.2 and 1.4 
with both my normal, older CogVM as well as the lastest one by Estaban.

In a normal clean image, there would be not Socket instances.

        Socket allInstances size = 0

Now create any kind of Socket

        Socket new (or newTCP, newUDP)

Now

        Socket allInstances size = 2

So Smalltalk reports two instances, but it seems they share the same 
socketHandle and semaphores, so one seems to be a shallow copy of the other.

(Close the one instance, 3 timesRepeat: [ Smalltalk garbageCollect ] and they 
are both gone).

Is this normal ?
Is there really only one OS level socket ?
Does this have to do with Sockets being in a WeakRegistry ?

It is confusing to say the least.

Sven
Yes it's normal, one is the finalizer of the other.

To differentiate them more easily, you could do
Socket >> actAsFinalizer
socketHandle := socketHandle bitInvert.

and
finalize
    self primSocketDestroyGently: socketHandle bitInvert.

This will (99.9% likely at least) give a printstring of invalidSocketHandle for the finalizing Socket instance.

Cheers,
Henry



Reply via email to