[Vm-dev] VM Maker: VMMaker.oscog-eem.2566.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Sep 19 04:26:01 UTC 2019

Eliot Miranda uploaded a new version of VMMaker to project VM Maker:

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

Name: VMMaker.oscog-eem.2566
Author: eem
Time: 18 September 2019, 9:23:01.791049 pm
UUID: 71a20c6c-db1d-45e9-b85d-54aa2fd0cf8e
Ancestors: VMMaker.oscog-eem.2565

Complete the simulation support for the SocketTest suite tests.
Make sure that the processes spawned by the SocketPluginSimulator run at a higher priority than the VM simulator and that they do not preempt it until they are all spawned.
Fix a slip in SocketPluginSimulator>>closeAndDestroy:.

=============== Diff against VMMaker.oscog-eem.2565 ===============

Item was changed:
  ----- Method: SocketPluginSimulator>>closeAndDestroy: (in category 'initialize-release') -----
  closeAndDestroy: socketHandle
  	"c.f. Socket closeAndDestroy: timeoutSeconds"
  	| fakeSocket |
  	fakeSocket := Socket basicNew.
  	[(fakeSocket primSocketConnectionStatus: socketHandle) = (Socket classPool at: #Connected) ifTrue:
  		[fakeSocket primSocketCloseConnection: socketHandle].
  		primSocketAbortConnection: socketHandle;
  		primSocketDestroy: socketHandle]
  		on: SocketPrimitiveFailed
+ 		do: [:ex| Transcript cr; show: ex messageText]!
- 		do: [:ex| Transcript cr; show: ex message]!

Item was changed:
  ----- Method: SocketPluginSimulator>>map:to:type:register:spawning:and:and: (in category 'simulation support') -----
  map: hostSocketHandle to: simSockPtr type: socketType register: semaphores spawning: blockOne and: blockTwo and: blockThree
+ 	| simSocket ourPriority |
- 	| simSocket |
  	"SQSocket is typedef struct { int sessionID; int socketType; void *privateSocketPtr; } SQSocket"
  	simSocket := ByteArray new: (self sizeof: #SQSocket).
  		unsignedLongAt: 1 put: interpreterProxy getThisSessionID;
  		unsignedLongAt: 5 put: socketType.
  	simSocket size = 12
  		ifTrue: [simSocket unsignedLongAt: 9 put: (fakeAddressCounter := fakeAddressCounter + 64)]
  		ifFalse: [simSocket unsignedLongLongAt: 9 put: (fakeAddressCounter := fakeAddressCounter + 80)].
  	self assert: ((interpreterProxy isBytes: simSockPtr cPtrAsOop)
  				and: [(interpreterProxy numBytesOf: simSockPtr cPtrAsOop) = simSocket size]).
  	1 to: simSocket size do:
  		[:i| simSockPtr at: i - 1 put: (simSocket at: i)].
  	self assert: (self simSocketHandleFrom: simSockPtr) = simSocket.
  	openSocketHandles add: hostSocketHandle.
  	hostSocketToSimSocketMap at: hostSocketHandle put: simSocket.
  	simSocketToHostSocketMap at: simSocket put: hostSocketHandle.
  	externalSemaphores addAll: semaphores.
  	"N.B. These don't need registering.  Eventually they will end up
  	 waiting on semaphores that have been unregistered, and hence
+ 	 will get garbage collected, along with these processes. But a) run them at one higher than the current priority, and
+ 	 b) ensure that they all effectively resume at the same time; i.e. ensure this code doesn;t get preempted by the first
+ 	 process to start running."
+ 	ourPriority := Processor activePriority.
+ 	[({blockOne. blockTwo. blockThree}
+ 				collect: [:b| b newProcess priority: ourPriority + 1; yourself])
+ 			do: [:each| each resume]]
+ 		valueAt: ourPriority + 2!
- 	 will get garbage collected, along with these processes."
- 	blockOne fork.
- 	blockTwo fork.
- 	blockThree fork!

Item was added:
+ ----- Method: SocketPluginSimulator>>primitiveSocketListenWithOrWithoutBacklog (in category 'primitives') -----
+ primitiveSocketListenWithOrWithoutBacklog
+ 	"This is a hack to get around limitations in the simulated dispatch of smart syntax primitives."
+ 	interpreterProxy methodArgumentCount = 2 ifTrue:
+ 		["self primitive: 'primitiveSocketListenOnPort' parameters: #(#Oop #SmallInteger)"
+ 		 ^self primitiveSocket: (interpreterProxy stackValue: 1)
+ 				listenOnPort: (interpreterProxy stackIntegerValue: 0)].
+ 	"self primitive: 'primitiveSocketListenOnPortBacklog' parameters: #(#Oop #SmallInteger #SmallInteger)"
+ 	^self primitiveSocket: (interpreterProxy stackValue: 1)
+ 		listenOnPort: (interpreterProxy stackIntegerValue: 0)
+ 		backlogSize: (interpreterProxy stackIntegerValue: 0)!

Item was added:
+ ----- Method: SocketPluginSimulator>>sqSocket:ListenOnPort: (in category 'simulation') -----
+ sqSocket: socketHandle ListenOnPort: portNumber
+ 	^[Socket basicNew
+ 			primSocket: ((self hostSocketHandleFromSimSocketHandle: socketHandle) ifNil: [^self])
+ 			listenOn: portNumber]
+ 		on: SocketPrimitiveFailed
+ 		do: [:ex|
+ 			interpreterProxy primitiveFail.
+ 			0]!

Item was added:
+ ----- Method: SocketPluginSimulator>>sqSocketLocalPort: (in category 'simulation') -----
+ sqSocketLocalPort: socketHandleCArray 
+ 	^[Socket basicNew
+ 			primSocketLocalPort: ((self hostSocketHandleFromSimSocketHandle: socketHandleCArray) ifNil: [^false])]
+ 		on: SocketPrimitiveFailed
+ 		do: [:ex|
+ 			interpreterProxy primitiveFail.
+ 			false]!

More information about the Vm-dev mailing list