[squeak-dev] The Trunk: Network-ul.182.mcz

Chris Muller ma.chris.m at gmail.com
Sun Aug 14 18:21:52 UTC 2016


Yep.  They did.

On Sat, Aug 13, 2016 at 4:03 PM, Levente Uzonyi <leves at caesar.elte.hu> wrote:
> Hi Chris,
>
> Let me know if the tests pass.
>
> Levente
>
> On Sat, 13 Aug 2016, Chris Muller wrote:
>
>> This relieves a lot of pressure on the "Magma for Squeak 5.1" release.
>> Very much appreciated, thanks Levente.
>>
>> Best,
>>  Chris
>>
>> On Sat, Aug 13, 2016 at 2:28 PM,  <commits at source.squeak.org> wrote:
>>>
>>> Levente Uzonyi uploaded a new version of Network to project The Trunk:
>>> http://source.squeak.org/trunk/Network-ul.182.mcz
>>>
>>> ==================== Summary ====================
>>>
>>> Name: Network-ul.182
>>> Author: ul
>>> Time: 13 August 2016, 9:27:46.042121 pm
>>> UUID: 55cbd441-e7a5-4651-a45f-45e6e94e47aa
>>> Ancestors: Network-ul.180
>>>
>>> Socket:
>>> - use #isConnected instead of #isThisEndConnected and
>>> #isOtherEndConnected while the VMs don't fully support half-open connections
>>> SocketStream:
>>> - do not recreate the buffers in #resetBuffers when nothing would change
>>>
>>> =============== Diff against Network-ul.180 ===============
>>>
>>> Item was changed:
>>>   ----- Method: Socket>>closeAndDestroy: (in category 'connection
>>> open/close') -----
>>>   closeAndDestroy: timeoutSeconds
>>>         "First, try to close this connection gracefully. If the close
>>> attempt fails or times out, abort the connection. In either case, destroy
>>> the socket. Do nothing if the socket has already been destroyed (i.e., if
>>> its socketHandle is nil)."
>>>
>>>         socketHandle ifNil: [ ^self ].
>>> +       self isConnected ifTrue: [
>>> -       self isThisEndConnected ifTrue: [
>>>                 self close.  "Close this end." ].
>>>         (self waitForDisconnectionFor: timeoutSeconds) ifFalse: [
>>>                 "The other end has not closed the connect yet, so we will
>>> just abort it."
>>>                 self primSocketAbortConnection: socketHandle ].
>>>         self destroy!
>>>
>>> Item was changed:
>>>   ----- Method: Socket>>discardReceivedData (in category 'receiving')
>>> -----
>>>   discardReceivedData
>>>         "Discard any data received up until now, and return the number of
>>> bytes discarded."
>>>
>>>         | buf totalBytesDiscarded |
>>>         buf := String new: 10000.
>>>         totalBytesDiscarded := 0.
>>> +       [self isConnected and: [self dataAvailable]] whileTrue: [
>>> -       [self isOtherEndConnected and: [self dataAvailable]] whileTrue: [
>>>                 totalBytesDiscarded :=
>>>                         totalBytesDiscarded + (self receiveDataInto:
>>> buf)].
>>>         ^ totalBytesDiscarded
>>>   !
>>>
>>> Item was changed:
>>>   ----- Method: Socket>>waitForDataFor:ifClosed:ifTimedOut: (in category
>>> 'waiting') -----
>>>   waitForDataFor: timeout ifClosed: closedBlock ifTimedOut: timedOutBlock
>>>         "Wait for the given nr of seconds for data to arrive."
>>>
>>>         | deadline timeLeft |
>>>         socketHandle ifNil: [ ^closedBlock value ].
>>>         deadline := Time millisecondClockValue + (timeout * 1000)
>>> truncated.
>>>         [
>>>                 (self primSocketReceiveDataAvailable: socketHandle)
>>> ifTrue: [ ^self ].
>>> +               self isConnected ifFalse: [ ^closedBlock value ].
>>> -               self isOtherEndConnected ifFalse: [ ^closedBlock value ].
>>>                 (timeLeft := deadline - Time millisecondClockValue) <= 0
>>> ifTrue: [ ^timedOutBlock value ].
>>>                 "Providing a maximum for the time for waiting is a
>>> workaround for a VM bug which causes sockets waiting for data forever in
>>> some rare cases, because the semaphore doesn't get signaled. Remove the
>>> ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is
>>> fixed."
>>>                 readSemaphore waitTimeoutMSecs:
>>>                         (timeLeft min: self class
>>> maximumReadSemaphoreWaitTimeout) ] repeat!
>>>
>>> Item was changed:
>>>   ----- Method: Socket>>waitForDataIfClosed: (in category 'waiting')
>>> -----
>>>   waitForDataIfClosed: closedBlock
>>>         "Wait indefinitely for data to arrive.  This method will block
>>> until
>>>         data is available or the socket is closed."
>>>
>>>         socketHandle ifNil: [ ^closedBlock value ].
>>>         [
>>>                 (self primSocketReceiveDataAvailable: socketHandle)
>>> ifTrue: [ ^self ].
>>> +                self isConnected ifFalse: [ ^closedBlock value ].
>>> -                self isOtherEndConnected ifFalse: [ ^closedBlock value
>>> ].
>>>                  "ul 8/13/2014 21:16
>>>                   Providing a maximum for the time for waiting is a
>>> workaround for a VM bug which
>>>                   causes sockets waiting for data forever in some rare
>>> cases, because the semaphore
>>>                   doesn't get signaled. Replace the ""waitTimeoutMSecs:
>>> self class maximumReadSemaphoreWaitTimeout""
>>>                   part with ""wait"" when the bug is fixed."
>>>                  readSemaphore waitTimeoutMSecs: self class
>>> maximumReadSemaphoreWaitTimeout ] repeat!
>>>
>>> Item was changed:
>>>   ----- Method: Socket>>waitForDisconnectionFor: (in category 'waiting')
>>> -----
>>>   waitForDisconnectionFor: timeout
>>>         "Wait for the given nr of seconds for the connection to be
>>> broken.
>>>         Return true if it is broken by the deadline, false if not.
>>>         The client should know the connection is really going to be
>>> closed
>>>         (e.g., because he has called 'close' to send a close request to
>>> the other end)
>>>         before calling this method."
>>>
>>>         | deadline |
>>>         deadline := Time millisecondClockValue + (timeout * 1000)
>>> truncated.
>>> +       [ self isConnected and: [ deadline - Time millisecondClockValue >
>>> 0 ] ]
>>> -       [ self isOtherEndConnected and: [ deadline - Time
>>> millisecondClockValue > 0 ] ]
>>>                 whileTrue: [
>>>                         self discardReceivedData.
>>>                         "Providing a maximum for the time for waiting is
>>> a workaround for a VM bug which causes sockets waiting for data forever in
>>> some rare cases, because the semaphore doesn't get signaled. Remove the
>>> ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is
>>> fixed."
>>>                         readSemaphore waitTimeoutMSecs:
>>>                                 (deadline - Time millisecondClockValue
>>> min: self class maximumReadSemaphoreWaitTimeout) ].
>>> +       ^self isConnected!
>>> -       ^self isOtherEndConnected!
>>>
>>> Item was changed:
>>>   ----- Method: Socket>>waitForSendDoneFor: (in category 'waiting') -----
>>>   waitForSendDoneFor: timeout
>>>         "Wait up until the given deadline for the current send operation
>>> to complete. Return true if it completes by the deadline, false if not."
>>>
>>>         | deadline timeleft |
>>>         deadline := Time millisecondClockValue + (timeout * 1000)
>>> truncated.
>>>         [
>>>                 (self primSocketSendDone: socketHandle) ifTrue: [ ^true
>>> ].
>>> +               self isConnected ifFalse: [ ^false ].
>>> -               self isThisEndConnected ifFalse: [ ^false ].
>>>                 (timeleft := deadline - Time millisecondClockValue) <= 0
>>> ifTrue: [ ^false ].
>>>                 writeSemaphore waitTimeoutMSecs: timeleft ] repeat!
>>>
>>> Item was changed:
>>>   ----- Method: SocketStream>>resetBuffers (in category 'private') -----
>>>   resetBuffers
>>>         "Recreate the buffers with default start sizes."
>>>
>>> +       (inBuffer isNil or: [ inBuffer size ~= bufferSize ]) ifTrue: [
>>> +               inBuffer := self streamBuffer: bufferSize ].
>>> -       inBuffer := self streamBuffer: bufferSize.
>>>         lastRead := 0.
>>>         inNextToWrite := 1.
>>> +       (outBuffer isNil or: [ outBuffer size ~= bufferSize ]) ifTrue: [
>>> +               outBuffer := self streamBuffer: bufferSize ].
>>> -       outBuffer := self streamBuffer: bufferSize.
>>>         outNextToWrite := 1!
>>>
>>>
>>
>>
>


More information about the Squeak-dev mailing list