[squeak-dev] The Inbox: Files-ul.140.mcz
commits at source.squeak.org
commits at source.squeak.org
Sat Oct 25 23:54:51 UTC 2014
A new version of Files was added to project The Inbox:
http://source.squeak.org/inbox/Files-ul.140.mcz
==================== Summary ====================
Name: Files-ul.140
Author: ul
Time: 26 October 2014, 1:45:59.442 am
UUID: fd217dff-eddb-40c4-93fa-41da16965596
Ancestors: Files-eem.138
- use the new ExternalSemaphoreTable API
=============== Diff against Files-eem.138 ===============
Item was changed:
----- Method: AsyncFile>>close (in category 'as yet unclassified') -----
close
fileHandle ifNil: [^ self]. "already closed"
self primClose: fileHandle.
+ ExternalSemaphoreTable unregisterExternalObject: semaphore.
- Smalltalk unregisterExternalObject: semaphore.
semaphore := nil.
fileHandle := nil.
!
Item was changed:
----- Method: AsyncFile>>open:forWrite: (in category 'as yet unclassified') -----
open: fullFileName forWrite: aBoolean
"Open a file of the given name, and return a handle for that file. Answer the receiver if the primitive succeeds, nil otherwise.
If openForWrite is true, then:
if there is no existing file with this name, then create one
else open the existing file in read-write mode
otherwise:
if there is an existing file with this name, then open it read-only
else answer nil."
"Note: if an exisiting file is opened for writing, it is NOT truncated. If truncation is desired, the file should be deleted before being opened as an asynchronous file."
"Note: On some platforms (e.g., Mac), a file can only have one writer at a time."
- | semaIndex |
name := fullFileName.
writeable := aBoolean.
+ ^ExternalSemaphoreTable newExternalSemaphoreDo: [ :newSemaphore :index |
+ fileHandle := self primOpen: name asVmPathName forWrite: writeable semaIndex: index.
+ fileHandle
+ ifNotNil: [
+ semaphore := newSemaphore.
+ self ]
+ ifNil: [
+ ExternalSemaphoreTable unregisterExternalObject: newSemaphore.
+ nil ] ]!
- semaphore := Semaphore new.
- semaIndex := Smalltalk registerExternalObject: semaphore.
- fileHandle := self primOpen: name asVmPathName forWrite: writeable semaIndex: semaIndex.
- fileHandle ifNil: [
- Smalltalk unregisterExternalObject: semaphore.
- semaphore := nil.
- ^ nil].
- !
Item was changed:
----- Method: StandardFileStream>>post:target:url:ifError: (in category 'browser requests') -----
post: data target: target url: url ifError: errorBlock
"Post data to the given URL. The returned file stream contains the reply of the server.
If Squeak is not running in a browser evaluate errorBlock"
+
- | sema index request result |
self waitBrowserReadyFor: self defaultBrowserReadyWait ifFail: [^errorBlock value].
+ ExternalSemaphoreTable newExternalSemaphoreDo: [ :semaphore :index |
+ | request result |
+ request := self primURLPost: url target: target data: data semaIndex: index.
+ request ifNil: [
+ ExternalSemaphoreTable unregisterExternalObject: semaphore.
+ ^errorBlock value ].
+ [ semaphore wait. "until something happens"
+ result := self primURLRequestState: request.
+ result == nil ] whileTrue.
+ result ifTrue: [ fileID := self primURLRequestFileHandle: request ].
- sema := Semaphore new.
- index := Smalltalk registerExternalObject: sema.
- request := self primURLPost: url target: target data: data semaIndex: index.
- request == nil ifTrue:[
-
- Smalltalk unregisterExternalObject: sema.
- ^errorBlock value.
- ] ifFalse:[
- [sema wait. "until something happens"
- result := self primURLRequestState: request.
- result == nil] whileTrue.
- result ifTrue:[fileID := self primURLRequestFileHandle: request].
self primURLRequestDestroy: request.
+ ExternalSemaphoreTable unregisterExternalObject: semaphore ].
+ fileID ifNil: [ ^nil ].
- ].
- Smalltalk unregisterExternalObject: sema.
- fileID == nil ifTrue:[^nil].
self register.
name := url.
rwmode := false.
buffer1 := String new: 1.
+ self enableReadBuffering!
- self enableReadBuffering
- !
Item was changed:
----- Method: StandardFileStream>>requestURL:target:ifError: (in category 'browser requests') -----
requestURL: url target: target ifError: errorBlock
"Request to go to the target for the given URL.
If Squeak is not running in a browser evaluate errorBlock"
- | sema index request result |
self waitBrowserReadyFor: self defaultBrowserReadyWait ifFail: [^errorBlock value].
+ ExternalSemaphoreTable newExternalSemaphoreDo: [ :semaphore :index |
+ | request result |
+ request := self primURLRequest: url target: target semaIndex: index.
+ request ifNil: [
+ ExternalSemaphoreTable unregisterExternalObject: semaphore.
+ ^errorBlock value ].
+ [ semaphore wait. "until something happens"
+ result := self primURLRequestState: request.
+ result == nil ] whileTrue.
- sema := Semaphore new.
- index := Smalltalk registerExternalObject: sema.
- request := self primURLRequest: url target: target semaIndex: index.
- request == nil ifTrue:[
-
- Smalltalk unregisterExternalObject: sema.
- ^errorBlock value.
- ] ifFalse:[
- [sema wait. "until something happens"
- result := self primURLRequestState: request.
- result == nil] whileTrue.
self primURLRequestDestroy: request.
+ ExternalSemaphoreTable unregisterExternalObject: semaphore ].
+ fileID ifNil: [ ^nil ].
- ].
- Smalltalk unregisterExternalObject: sema.
- fileID == nil ifTrue:[^nil].
self register.
name := url.
rwmode := false.
buffer1 := String new: 1.
+ self enableReadBuffering!
- self enableReadBuffering
- !
Item was changed:
----- Method: StandardFileStream>>requestURLStream:ifError: (in category 'browser requests') -----
requestURLStream: url ifError: errorBlock
"Request a FileStream for the given URL.
If Squeak is not running in a browser evaluate errorBlock"
"FileStream requestURLStream:'http://www.squeak.org'"
+
- | sema index request result |
self waitBrowserReadyFor: self defaultBrowserReadyWait ifFail: [^errorBlock value].
+ ExternalSemaphoreTable newExternalSemaphoreDo: [ :semaphore :index |
+ | request result |
+ request := self primURLRequest: url semaIndex: index.
+ request ifNil: [
+ ExternalSemaphoreTable unregisterExternalObject: semaphore.
+ ^errorBlock value ].
+ [ semaphore wait. "until something happens"
+ result := self primURLRequestState: request.
+ result == nil ] whileTrue.
+ result ifTrue: [ fileID := self primURLRequestFileHandle: request ].
- sema := Semaphore new.
- index := Smalltalk registerExternalObject: sema.
- request := self primURLRequest: url semaIndex: index.
- request == nil ifTrue:[
-
- Smalltalk unregisterExternalObject: sema.
- ^errorBlock value.
- ] ifFalse:[
- [sema wait. "until something happens"
- result := self primURLRequestState: request.
- result == nil] whileTrue.
- result ifTrue:[fileID := self primURLRequestFileHandle: request].
self primURLRequestDestroy: request.
+ ExternalSemaphoreTable unregisterExternalObject: semaphore ].
+ fileID ifNil: [ ^nil ].
- ].
- Smalltalk unregisterExternalObject: sema.
- fileID == nil ifTrue:[^nil].
self register.
name := url.
rwmode := false.
buffer1 := String new: 1.
+ self enableReadBuffering!
- self enableReadBuffering
- !
More information about the Squeak-dev
mailing list
|