[Pkg] The Trunk: Files-ul.141.mcz

commits at source.squeak.org commits at source.squeak.org
Mon Oct 27 21:15:01 UTC 2014


Levente Uzonyi uploaded a new version of Files to project The Trunk:
http://source.squeak.org/trunk/Files-ul.141.mcz

==================== Summary ====================

Name: Files-ul.141
Author: ul
Time: 27 October 2014, 4:51:14.305 pm
UUID: b0dbabfe-ce75-4f18-a82f-2f95fa8b026e
Ancestors: Files-eem.138

- use the new ExternalObjectTable API

=============== Diff against Files-eem.138 ===============

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.
+ 	^Smalltalk newExternalSemaphoreDo: [ :newSemaphore :index |
+ 		fileHandle := self primOpen: name asVmPathName forWrite: writeable semaIndex: index.
+ 		fileHandle
+ 			ifNotNil: [
+ 				semaphore := newSemaphore.
+ 				self ]
+ 			ifNil: [
+ 				Smalltalk 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].
+ 	Smalltalk newExternalSemaphoreDo: [ :semaphore :index |
+ 		| request result |
+ 		request := self primURLPost: url target: target data: data semaIndex: index.
+ 		request ifNil: [
+ 			Smalltalk 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.
+ 		Smalltalk 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].
+ 	Smalltalk newExternalSemaphoreDo: [ :semaphore :index |
+ 		| request result |
+ 		request := self primURLRequest: url target: target semaIndex: index.
+ 		request ifNil: [
+ 			Smalltalk 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.
+ 		Smalltalk 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].
+ 	Smalltalk newExternalSemaphoreDo: [ :semaphore :index |
+ 		| request result |
+ 		request := self primURLRequest: url semaIndex: index.
+ 		request ifNil: [
+ 			Smalltalk 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.
+ 		Smalltalk 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 Packages mailing list