Tobias Pape uploaded a new version of Monticello to project The Trunk:
http://source.squeak.org/trunk/Monticello-topa.627.mcz
==================== Summary ====================
Name: Monticello-topa.627
Author: topa
Time: 26 February 2016, 1:10:40.42795 pm
UUID: 65a5a11e-e321-40e0-bf4b-7e80a90509a7
Ancestors: Monticello-mt.626
Fix MCStReader for 'new' Spur class types
=============== Diff against Monticello-mt.626 ===============
Item was changed:
----- Method: MCStReader>>typeOfSubclass: (in category 'as yet unclassified') -----
typeOfSubclass: aSymbol
#(
(subclass: normal)
(variableSubclass: variable)
(variableByteSubclass: bytes)
(variableWordSubclass: words)
(weakSubclass: weak)
+ (ephemeronSubclass: ephemeron)
+ (immediateSubclass: immediate)
) do: [:ea | ea first = aSymbol ifTrue: [^ ea second]].
self error: 'Unrecognized class definition'!
Tobias Pape uploaded a new version of Monticello to project The Trunk:
http://source.squeak.org/trunk/Monticello-topa.627.mcz
==================== Summary ====================
Name: Monticello-topa.627
Author: topa
Time: 26 February 2016, 1:10:40.42795 pm
UUID: 65a5a11e-e321-40e0-bf4b-7e80a90509a7
Ancestors: Monticello-mt.626
Fix MCStReader for 'new' Spur class types
=============== Diff against Monticello-mt.626 ===============
Item was changed:
----- Method: MCStReader>>typeOfSubclass: (in category 'as yet unclassified') -----
typeOfSubclass: aSymbol
#(
(subclass: normal)
(variableSubclass: variable)
(variableByteSubclass: bytes)
(variableWordSubclass: words)
(weakSubclass: weak)
+ (ephemeronSubclass: ephemeron)
+ (immediateSubclass: immediate)
) do: [:ea | ea first = aSymbol ifTrue: [^ ea second]].
self error: 'Unrecognized class definition'!
Eliot Miranda uploaded a new version of Network to project The Trunk:
http://source.squeak.org/trunk/Network-eem.172.mcz
==================== Summary ====================
Name: Network-eem.172
Author: eem
Time: 25 February 2016, 1:07:33.303622 pm
UUID: 5c73783a-d4e2-413e-b5eb-f04ad8decee2
Ancestors: Network-ul.171
Fix two failures to check if a socket is closed (socketHandle is nil) before attempting to read from the socket.
=============== Diff against Network-ul.171 ===============
Item was changed:
----- Method: Socket>>receiveDataInto:startingAt: (in category 'receiving') -----
receiveDataInto: aStringOrByteArray startingAt: aNumber
"Receive data into the given buffer and return the number of bytes received.
Note the given buffer may be only partially filled by the received data.
Waits for data once. The answer may be zero (indicating that no data was
available before the socket closed)."
+ | bytesRead open |
- | bytesRead closed |
bytesRead := 0.
+ open := true.
+ [open and: [bytesRead = 0]] whileTrue:
+ [self waitForDataIfClosed: [open := false].
+ open ifTrue:
+ [bytesRead := self primSocket: socketHandle
+ receiveDataInto: aStringOrByteArray
+ startingAt: aNumber
+ count: aStringOrByteArray size - aNumber + 1]].
- closed := false.
- [closed not and: [bytesRead = 0]]
- whileTrue: [
- self waitForDataIfClosed: [closed := true].
- bytesRead := self primSocket: socketHandle
- receiveDataInto: aStringOrByteArray
- startingAt: aNumber
- count: aStringOrByteArray size-aNumber+1].
^bytesRead
!
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 ~~ nil
+ and: [self primSocketReceiveDataAvailable: socketHandle]) ifTrue:
+ [^self].
+ self isConnected 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."
+ self readSemaphore waitTimeoutMSecs: self class maximumReadSemaphoreWaitTimeout] repeat!
- [
- (self primSocketReceiveDataAvailable: socketHandle)
- ifTrue: [^self].
- self isConnected
- ifFalse: [^closedBlock 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. Replace the ""waitTimeoutMSecs: self class maximumReadSemaphoreWaitTimeout"" part with ""wait"" when the bug is fixed."
- self readSemaphore waitTimeoutMSecs: self class maximumReadSemaphoreWaitTimeout ] repeat
- !
Eliot Miranda uploaded a new version of Network to project The Trunk:
http://source.squeak.org/trunk/Network-eem.172.mcz
==================== Summary ====================
Name: Network-eem.172
Author: eem
Time: 25 February 2016, 1:07:33.303622 pm
UUID: 5c73783a-d4e2-413e-b5eb-f04ad8decee2
Ancestors: Network-ul.171
Fix two failures to check if a socket is closed (socketHandle is nil) before attempting to read from the socket.
=============== Diff against Network-ul.171 ===============
Item was changed:
----- Method: Socket>>receiveDataInto:startingAt: (in category 'receiving') -----
receiveDataInto: aStringOrByteArray startingAt: aNumber
"Receive data into the given buffer and return the number of bytes received.
Note the given buffer may be only partially filled by the received data.
Waits for data once. The answer may be zero (indicating that no data was
available before the socket closed)."
+ | bytesRead open |
- | bytesRead closed |
bytesRead := 0.
+ open := true.
+ [open and: [bytesRead = 0]] whileTrue:
+ [self waitForDataIfClosed: [open := false].
+ open ifTrue:
+ [bytesRead := self primSocket: socketHandle
+ receiveDataInto: aStringOrByteArray
+ startingAt: aNumber
+ count: aStringOrByteArray size - aNumber + 1]].
- closed := false.
- [closed not and: [bytesRead = 0]]
- whileTrue: [
- self waitForDataIfClosed: [closed := true].
- bytesRead := self primSocket: socketHandle
- receiveDataInto: aStringOrByteArray
- startingAt: aNumber
- count: aStringOrByteArray size-aNumber+1].
^bytesRead
!
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 ~~ nil
+ and: [self primSocketReceiveDataAvailable: socketHandle]) ifTrue:
+ [^self].
+ self isConnected 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."
+ self readSemaphore waitTimeoutMSecs: self class maximumReadSemaphoreWaitTimeout] repeat!
- [
- (self primSocketReceiveDataAvailable: socketHandle)
- ifTrue: [^self].
- self isConnected
- ifFalse: [^closedBlock 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. Replace the ""waitTimeoutMSecs: self class maximumReadSemaphoreWaitTimeout"" part with ""wait"" when the bug is fixed."
- self readSemaphore waitTimeoutMSecs: self class maximumReadSemaphoreWaitTimeout ] repeat
- !
Chris Muller uploaded a new version of MorphicExtras to project The Trunk:
http://source.squeak.org/trunk/MorphicExtras-cmm.169.mcz
==================== Summary ====================
Name: MorphicExtras-cmm.169
Author: cmm
Time: 25 February 2016, 11:03:25.153465 am
UUID: ac057a2a-213a-42f4-9000-e9cf9513d112
Ancestors: MorphicExtras-kfr.168
Don't DNU when searching Object catalog.
=============== Diff against MorphicExtras-kfr.168 ===============
Item was changed:
----- Method: TwoWayScrollPane>>colorForInsets (in category 'accessing') -----
colorForInsets
"My submorphs use the surrounding color"
+ owner notNil and:
+ [ owner color isColor ifTrue: [ ^ owner color ] ].
-
- owner color isColor ifTrue:[^ owner color].
^ Color white!
Chris Muller uploaded a new version of MorphicExtras to project The Trunk:
http://source.squeak.org/trunk/MorphicExtras-cmm.169.mcz
==================== Summary ====================
Name: MorphicExtras-cmm.169
Author: cmm
Time: 25 February 2016, 11:03:25.153465 am
UUID: ac057a2a-213a-42f4-9000-e9cf9513d112
Ancestors: MorphicExtras-kfr.168
Don't DNU when searching Object catalog.
=============== Diff against MorphicExtras-kfr.168 ===============
Item was changed:
----- Method: TwoWayScrollPane>>colorForInsets (in category 'accessing') -----
colorForInsets
"My submorphs use the surrounding color"
+ owner notNil and:
+ [ owner color isColor ifTrue: [ ^ owner color ] ].
-
- owner color isColor ifTrue:[^ owner color].
^ Color white!
Chris Muller uploaded a new version of Files to project The Trunk:
http://source.squeak.org/trunk/Files-cmm.149.mcz
==================== Summary ====================
Name: Files-cmm.149
Author: cmm
Time: 25 February 2016, 11:02:08.954431 am
UUID: ddb4a999-0151-401d-8506-8f45bc69c3ad
Ancestors: Files-topa.148
- API compatibility for #asDirectoryEntry with DirectoryEntry.
- Check for existence of a directory of same name (not just a file) when renaming a file or directory.
=============== Diff against Files-topa.148 ===============
Item was added:
+ ----- Method: DirectoryEntry>>asDirectoryEntry (in category 'converting') -----
+ asDirectoryEntry
+ ^ self!
Item was changed:
----- Method: FileDirectory>>rename:toBe: (in category 'file operations') -----
rename: oldFileName toBe: newFileName
"Rename the file of the given name to the new name. Fail if there is no file of the old name or if there is an existing file with the new name."
"Modified for retry after GC ar 3/21/98 18:09"
| replaceIt oldName newName |
oldName := self fullNameFor: oldFileName.
newName := self fullNameFor: newFileName.
+ ((self fileExists: oldFileName) or: [ (self directoryExists: oldFileName) ]) ifFalse: [ ^ self error: 'Attempt to rename a non-existent file or directory.' ].
- (self fileExists: oldFileName) ifFalse: [ ^ self error: 'Attempt to rename a non-existent file' ].
(self fileExists: newFileName) ifTrue:
[replaceIt := (ReplaceExistingFileException fileName: newFileName) signal.
replaceIt ifTrue: [ self deleteFileNamed: newFileName ] ifFalse: [ ^ self ]].
+ (self directoryExists: newFileName) ifTrue: [ FileExistsException signal: newFileName, ' already exists.' ].
(StandardFileStream
retryWithGC:
[ self
primRename: oldName asVmPathName
to: newName asVmPathName ]
until: [ : result | result notNil ]
forFileNamed: oldName) ~~ nil ifTrue: [ ^ self ].
^ self error: 'Failed to rename file'!
Chris Muller uploaded a new version of Files to project The Trunk:
http://source.squeak.org/trunk/Files-cmm.149.mcz
==================== Summary ====================
Name: Files-cmm.149
Author: cmm
Time: 25 February 2016, 11:02:08.954431 am
UUID: ddb4a999-0151-401d-8506-8f45bc69c3ad
Ancestors: Files-topa.148
- API compatibility for #asDirectoryEntry with DirectoryEntry.
- Check for existence of a directory of same name (not just a file) when renaming a file or directory.
=============== Diff against Files-topa.148 ===============
Item was added:
+ ----- Method: DirectoryEntry>>asDirectoryEntry (in category 'converting') -----
+ asDirectoryEntry
+ ^ self!
Item was changed:
----- Method: FileDirectory>>rename:toBe: (in category 'file operations') -----
rename: oldFileName toBe: newFileName
"Rename the file of the given name to the new name. Fail if there is no file of the old name or if there is an existing file with the new name."
"Modified for retry after GC ar 3/21/98 18:09"
| replaceIt oldName newName |
oldName := self fullNameFor: oldFileName.
newName := self fullNameFor: newFileName.
+ ((self fileExists: oldFileName) or: [ (self directoryExists: oldFileName) ]) ifFalse: [ ^ self error: 'Attempt to rename a non-existent file or directory.' ].
- (self fileExists: oldFileName) ifFalse: [ ^ self error: 'Attempt to rename a non-existent file' ].
(self fileExists: newFileName) ifTrue:
[replaceIt := (ReplaceExistingFileException fileName: newFileName) signal.
replaceIt ifTrue: [ self deleteFileNamed: newFileName ] ifFalse: [ ^ self ]].
+ (self directoryExists: newFileName) ifTrue: [ FileExistsException signal: newFileName, ' already exists.' ].
(StandardFileStream
retryWithGC:
[ self
primRename: oldName asVmPathName
to: newName asVmPathName ]
until: [ : result | result notNil ]
forFileNamed: oldName) ~~ nil ifTrue: [ ^ self ].
^ self error: 'Failed to rename file'!