[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