The Inbox: Files-ul.139.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Inbox: Files-ul.139.mcz

commits-2
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
  !