Semaphore>>critical:

Hernán Morales Durand hernan.morales at gmail.com
Tue Jun 16 05:50:33 UTC 2009


Hi Chris and others,

  I'm using Squeak 3.11.2 (alpha) 27/3/2009 VM, Squeak 3.9-7067 and
Magma r42Gamma3.
  With the latest release of Magma, whenever a Debugger with a Magma
exception is raised, control is not returned, and is necessary to
press Alt + . to quit this situation. Doing this you will get a "User
Interrupt" debugger window.
But although control is returned, possibly there is still a deadlock
preventing other operations too, like mail out a bug report. Actually
to mail out the report below I've implemented a #semaphore getter in
Mutex and (inside the debugger) from Mutex>>critical: select the owner
instance variable and signal the semaphore.

16 June 2009 2:30:06 am
VM: Win32 - a SmalltalkImage
Image: Squeak3.9 [latest update: #7067]

SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir D:\OpusApp
Trusted Dir D:\OpusApp\compu
Untrusted Dir C:\Documents and Settings\compu\Mis documentos\My Squeak

Semaphore>>critical:
	Receiver: a Semaphore()
	Arguments and temporary variables:
		mutuallyExcludedBlock: 	[] in Mutex>>critical: {[owner :=
activeProcess.  aBlock...etc...
		blockValue: 	nil
	Receiver's instance variables:
		firstLink: 	nil
		lastLink: 	nil
		excessSignals: 	1

Mutex>>critical:
	Receiver: a Mutex
	Arguments and temporary variables:
		aBlock: 	[] in MagmaSession>>submit:to: {[aMagmaRepositoryRequest
waitCursor   s...etc...
		activeProcess: 	a Process in Semaphore>>critical:
	Receiver's instance variables:
		semaphore: 	a Semaphore()
		owner: 	a Process in Process>>suspend

MagmaSession>>submit:to:
	Receiver: a MagmaSession D:\OpusApp\Magma
	Arguments and temporary variables:
		aMagmaRepositoryRequest: 	a MagmaPathNameRequest
		aMaServerLink: 	a MaLocalServerLink
		didTry: 	nil
		link: 	nil
		result: 	nil
		err: 	nil
		node: 	nil
	Receiver's instance variables:
		id: 	an UUID('2caca4db-5f85-a546-a057-f7978a775e9c')
		user: 	a MagmaUser
	id = Opus
		serializer: 	a MaObjectSerializer
		transaction: 	a MaTransaction
		readStrategy: 	a MaReadStrategy
		definition: 	a MagmaRepositoryDefinition
		preferences: 	a MagmaPreferences
		anchor: 	nil
		transactionLevel: 	1
		strongReferences: 	an OrderedCollection()
		cache: 	a Dictionary()
		guard: 	a Mutex
		statistics: 	a MagmaSessionStatistics
		primaryLink: 	a MaLocalServerLink
		secondaryLink: 	a MaLocalServerLink
		allowFailover: 	true
		oidCount: 	12879073
		lastClean: 	26265480
		requiredProgress: 	0

MagmaSession>>pathNamePrimary
	Receiver: a MagmaSession D:\OpusApp\Magma
	Arguments and temporary variables:

	Receiver's instance variables:
		id: 	an UUID('2caca4db-5f85-a546-a057-f7978a775e9c')
		user: 	a MagmaUser
	id = Opus
		serializer: 	a MaObjectSerializer
		transaction: 	a MaTransaction
		readStrategy: 	a MaReadStrategy
		definition: 	a MagmaRepositoryDefinition
		preferences: 	a MagmaPreferences
		anchor: 	nil
		transactionLevel: 	1
		strongReferences: 	an OrderedCollection()
		cache: 	a Dictionary()
		guard: 	a Mutex
		statistics: 	a MagmaSessionStatistics
		primaryLink: 	a MaLocalServerLink
		secondaryLink: 	a MaLocalServerLink
		allowFailover: 	true
		oidCount: 	12879073
		lastClean: 	26265480
		requiredProgress: 	0


--- The full stack ---
Semaphore>>critical:
Mutex>>critical:
MagmaSession>>submit:to:
MagmaSession>>pathNamePrimary
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MagmaSession>>maPrintAbbreviatedOn:
MagmaSession(MaObject)>>printOn:
[] in MagmaSession(Object)>>printStringLimitedTo: {[:s | self printOn: s]}
String class(SequenceableCollection class)>>streamContents:limitedTo:
MagmaSession(Object)>>printStringLimitedTo:
[] in MethodContext>>printDetails: {[receiver printStringLimitedTo: 90]}
BlockContext>>on:do:
BlockContext>>ifError:
MethodContext>>printDetails:
MethodContext(ContextPart)>>errorReportOn:
[] in Debugger>>mailOutBugReport {[messageStrm := WriteStream     on:
(String new: 1500).  messageStrm nextPut...]}
BlockContext>>ensure:
CursorWithMask(Cursor)>>showWhile:
Debugger>>mailOutBugReport
Debugger(StringHolder)>>perform:orSendTo:
Debugger>>perform:orSendTo:
[] in MenuItemMorph>>invokeWithEvent: {[(selArgCount := selector
numArgs) = 0   ifTrue: [target perform: selector] ...]}
BlockContext>>ensure:
CursorWithMask(Cursor)>>showWhile:
MenuItemMorph>>invokeWithEvent:
MenuItemMorph>>mouseUp:
MenuItemMorph>>handleMouseUp:
MouseButtonEvent>>sentTo:
MenuItemMorph(Morph)>>handleEvent:
MorphicEventDispatcher>>dispatchDefault:with:
MorphicEventDispatcher>>dispatchEvent:with:
MenuItemMorph(Morph)>>processEvent:using:
MorphicEventDispatcher>>dispatchDefault:with:
MorphicEventDispatcher>>dispatchEvent:with:
MenuMorph(Morph)>>processEvent:using:
MenuMorph(Morph)>>processEvent:
MenuMorph>>handleFocusEvent:
[] in HandMorph>>sendFocusEvent:to:clear: {[ActiveHand := self.
ActiveEvent := anEvent.  result := focusHolder     han...]}
[] in PasteUpMorph>>becomeActiveDuring: {[aBlock value]}
BlockContext>>on:do:
...etc...

Cheers,

Hernan


More information about the Magma mailing list