[squeak-dev] The Inbox: Files-ul.139.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Oct 24 14:57:55 UTC 2014
A new version of Files was added to project The Inbox:
http://source.squeak.org/inbox/Files-ul.139.mcz
==================== Summary ====================
Name: Files-ul.139
Author: ul
Time: 24 October 2014, 3:50:04.3 am
UUID: 521172db-9620-40a3-94c4-79891c268a17
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.
+ semaphore := ExternalSemaphoreTable newExternalSemaphore.
+ fileHandle := self
+ primOpen: name asVmPathName
+ forWrite: writeable
+ semaIndex: semaphore indexInExternalObjectsArray.
- semaphore := Semaphore new.
- semaIndex := Smalltalk registerExternalObject: semaphore.
- fileHandle := self primOpen: name asVmPathName forWrite: writeable semaIndex: semaIndex.
fileHandle ifNil: [
+ ExternalSemaphoreTable unregisterExternalObject: semaphore.
- 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"
+ | semaphore request result |
- | sema index request result |
self waitBrowserReadyFor: self defaultBrowserReadyWait ifFail: [^errorBlock value].
+ semaphore := ExternalSemaphoreTable newExternalSemaphore.
+ request := self
+ primURLPost: url
+ target: target data: data
+ semaIndex: semaphore indexInExternalObjectsArray.
- sema := Semaphore new.
- index := Smalltalk registerExternalObject: sema.
- request := self primURLPost: url target: target data: data semaIndex: index.
request == nil ifTrue:[
+ ExternalSemaphoreTable unregisterExternalObject: semaphore.
-
- Smalltalk unregisterExternalObject: sema.
^errorBlock value.
] ifFalse:[
+ [semaphore wait. "until something happens"
- [sema wait. "until something happens"
result := self primURLRequestState: request.
result == nil] whileTrue.
result ifTrue:[fileID := self primURLRequestFileHandle: request].
self primURLRequestDestroy: request.
].
+ ExternalSemaphoreTable unregisterExternalObject: semaphore.
- Smalltalk unregisterExternalObject: sema.
fileID == nil ifTrue:[^nil].
self register.
name := url.
rwmode := false.
buffer1 := String new: 1.
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"
+ | semaphore request result |
- | sema index request result |
self waitBrowserReadyFor: self defaultBrowserReadyWait ifFail: [^errorBlock value].
+ semaphore := ExternalSemaphoreTable newExternalSemaphore.
+ request := self
+ primURLRequest: url
+ target: target
+ semaIndex: semaphore indexInExternalObjectsArray.
- sema := Semaphore new.
- index := Smalltalk registerExternalObject: sema.
- request := self primURLRequest: url target: target semaIndex: index.
request == nil ifTrue:[
+ ExternalSemaphoreTable unregisterExternalObject: semaphore.
-
- Smalltalk unregisterExternalObject: sema.
^errorBlock value.
] ifFalse:[
+ [semaphore wait. "until something happens"
- [sema wait. "until something happens"
result := self primURLRequestState: request.
result == nil] whileTrue.
self primURLRequestDestroy: request.
].
+ ExternalSemaphoreTable unregisterExternalObject: semaphore.
- Smalltalk unregisterExternalObject: sema.
fileID == nil ifTrue:[^nil].
self register.
name := url.
rwmode := false.
buffer1 := String new: 1.
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'"
+ | semaphore request result |
- | sema index request result |
self waitBrowserReadyFor: self defaultBrowserReadyWait ifFail: [^errorBlock value].
+ semaphore := ExternalSemaphoreTable newExternalSemaphore.
+ request := self
+ primURLRequest: url
+ semaIndex: semaphore indexInExternalObjectsArray.
- sema := Semaphore new.
- index := Smalltalk registerExternalObject: sema.
- request := self primURLRequest: url semaIndex: index.
request == nil ifTrue:[
+ ExternalSemaphoreTable unregisterExternalObject: semaphore.
-
- Smalltalk unregisterExternalObject: sema.
^errorBlock value.
] ifFalse:[
+ [semaphore wait. "until something happens"
- [sema wait. "until something happens"
result := self primURLRequestState: request.
result == nil] whileTrue.
result ifTrue:[fileID := self primURLRequestFileHandle: request].
self primURLRequestDestroy: request.
].
+ ExternalSemaphoreTable unregisterExternalObject: semaphore.
- Smalltalk unregisterExternalObject: sema.
fileID == nil ifTrue:[^nil].
self register.
name := url.
rwmode := false.
buffer1 := String new: 1.
self enableReadBuffering
!
More information about the Squeak-dev
mailing list
|