[squeak-dev] Squeaksource upload/respnse problem? (was Re: The Inbox: EToys-tpr.321.mcz)

David T. Lewis lewis at mail.msen.com
Thu Mar 8 00:50:33 UTC 2018


Just guessing, but I do have shell access to that server and it looks to
me like the source.squeak.org image is serializing the in-image repository
out to disk (data.obj) when changes happen. If that happens in line with
the response to the client, then timeouts would be the likely result.

I am not actively following up on this, but if someone wants to take a
look at the image, this would be the first thing I would check.

The old squeaksource.com image relies on an hourly image save to back
itself (and the respository) up to disk. It's not very fancy but it works.
If I were to do it instead by serializing the repository to a data.obj
file, I would probably do it with a #forkSqueak to keep the primary image
responsive.

@Tobias: What does SS2/SS3 do?

Dave


On Wed, Mar 07, 2018 at 02:11:38PM +0100, Levente Uzonyi wrote:
> No, it's not. Changes happen almost instantly. You can verify this by 
> using another session (another tab in the browser or another image) that 
> your upload/change is already on the server while your original session is 
> still waiting for a response until timeout.
> Also, every single upload will be timed out.
> 
> Levente
> 
> On Wed, 7 Mar 2018, Tobias Pape wrote:
> 
> >Maybe the server is just thinking very deeply ??\_(???)_/??
> >
> >-t
> >
> >
> >>On 06.03.2018, at 23:10, Levente Uzonyi <leves at caesar.elte.hu> wrote:
> >>
> >>It's been like that lately.
> >>I'm fairly sure it's a bug in the image serving source.squeak.org, 
> >>because it also happens when you use the web interface to move a package 
> >>version, and wireshark only shows that the server does not respond.
> >>I also checked if there are any suspicious firewall rules in place on the 
> >>server, but there were none.
> >>And it never happens on any other squeaksource repositories.
> >>
> >>Levente
> >>
> >>On Tue, 6 Mar 2018, tim Rowledge wrote:
> >>
> >>>
> >>>
> >>>>On 06-03-2018, at 12:49 PM, commits at source.squeak.org wrote:
> >>>>tim Rowledge uploaded a new version of EToys to project The Inbox:
> >>>>http://source.squeak.org/inbox/EToys-tpr.321.mcz
> >>>
> >>>Hmm, looks like squeaksource is having some sort of problem since it 
> >>>tells me that my commit failed. So far as I can tell from the debugger 
> >>>it appears to be more a case of the response not arriving to confirm an 
> >>>upload - it times out but in #waitForData. 'From: tim at rowledge.org
> >>>To: squeak-dev at lists.squeakfoundation.org
> >>>Subject: [BUG]SocketStream>>signalTimeout
> >>>
> >>>here insert explanation of what you were doing, suspect changes you''ve 
> >>>made and so forth.
> >>>
> >>>6 March 2018 1:20:57.691799 pm
> >>>
> >>>VM: unix - Smalltalk
> >>>Image: Squeak6.0alpha [latest update: #17785]
> >>>
> >>>SecurityManager state:
> >>>Restricted: false
> >>>FileAccess: true
> >>>SocketAccess: true
> >>>Working Dir /home/pi/Squeak
> >>>Trusted Dir /home/pi/Squeak/secure
> >>>Untrusted Dir /home/pi/Squeak/My Squeak
> >>>
> >>>SocketStream>>signalTimeout
> >>>	Receiver: SocketStream[inbuf:4kb/outbuf:8kb]
> >>>	Arguments and temporary variables:
> >>>	Receiver''s instance variables:
> >>>		recentlyRead: 	0
> >>>		socket: 	a Socket[connected]
> >>>		inBuffer: 	''...etc...
> >>>		outBuffer: 	''P 
> >>>		???t????$5????>mK????I????1???????R@????A???sb???iE???????=F
???-Y4???
???????	??????S????y????d?????????????9
%???????????????????????...etc...
> >>>		inNextToWrite: 	1
> >>>		outNextToWrite: 	1
> >>>		lastRead: 	0
> >>>		timeout: 	45
> >>>		autoFlush: 	true
> >>>		bufferSize: 	4096
> >>>		binary: 	false
> >>>		shouldSignal: 	true
> >>>
> >>>[] in SocketStream>>waitForData
> >>>	Receiver: SocketStream[inbuf:4kb/outbuf:8kb]
> >>>	Arguments and temporary variables:
> >>>	Receiver''s instance variables:
> >>>		recentlyRead: 	0
> >>>		socket: 	a Socket[connected]
> >>>		inBuffer: 	''...etc...
> >>>		outBuffer: 	''P 
> >>>		???t????$5????>mK????I????1???????R@????A???sb???iE???????=F
???-Y4???
???????	??????S????y????d?????????????9
%???????????????????????...etc...
> >>>		inNextToWrite: 	1
> >>>		outNextToWrite: 	1
> >>>		lastRead: 	0
> >>>		timeout: 	45
> >>>		autoFlush: 	true
> >>>		bufferSize: 	4096
> >>>		binary: 	false
> >>>		shouldSignal: 	true
> >>>
> >>>Socket>>waitForDataFor:ifClosed:ifTimedOut:
> >>>	Receiver: a Socket[connected]
> >>>	Arguments and temporary variables:
> >>>		timeout: 	45
> >>>		closedBlock: 	[closure] in SocketStream>>waitForData
> >>>		timedOutBlock: 	[closure] in SocketStream>>waitForData
> >>>		deadline: 	3697822386066
> >>>		timeLeft: 	-1
> >>>	Receiver''s instance variables:
> >>>		semaphore: 	a Semaphore()
> >>>		socketHandle: 	#[151 254 66 131 0 0 0 0 176 33 170 0]
> >>>		readSemaphore: 	a Semaphore()
> >>>		writeSemaphore: 	a Semaphore()
> >>>
> >>>SocketStream>>waitForData
> >>>	Receiver: SocketStream[inbuf:4kb/outbuf:8kb]
> >>>	Arguments and temporary variables:
> >>>	Receiver''s instance variables:
> >>>		recentlyRead: 	0
> >>>		socket: 	a Socket[connected]
> >>>		inBuffer: 	''...etc...
> >>>		outBuffer: 	''P 
> >>>		???t????$5????>mK????I????1???????R@????A???sb???iE???????=F
???-Y4???
???????	??????S????y????d?????????????9
%???????????????????????...etc...
> >>>		inNextToWrite: 	1
> >>>		outNextToWrite: 	1
> >>>		lastRead: 	0
> >>>		timeout: 	45
> >>>		autoFlush: 	true
> >>>		bufferSize: 	4096
> >>>		binary: 	false
> >>>		shouldSignal: 	true
> >>>
> >>>SocketStream>>receiveData
> >>>	Receiver: SocketStream[inbuf:4kb/outbuf:8kb]
> >>>	Arguments and temporary variables:
> >>>	Receiver''s instance variables:
> >>>		recentlyRead: 	0
> >>>		socket: 	a Socket[connected]
> >>>		inBuffer: 	''...etc...
> >>>		outBuffer: 	''P 
> >>>		???t????$5????>mK????I????1???????R@????A???sb???iE???????=F
???-Y4???
???????	??????S????y????d?????????????9
%???????????????????????...etc...
> >>>		inNextToWrite: 	1
> >>>		outNextToWrite: 	1
> >>>		lastRead: 	0
> >>>		timeout: 	45
> >>>		autoFlush: 	true
> >>>		bufferSize: 	4096
> >>>		binary: 	false
> >>>		shouldSignal: 	true
> >>>
> >>>SocketStream>>upToAll:limit:
> >>>	Receiver: SocketStream[inbuf:4kb/outbuf:8kb]
> >>>	Arguments and temporary variables:
> >>>		aStringOrByteArray: 	''
> >>>
> >>>''
> >>>		nBytes: 	100000
> >>>		index: 	0
> >>>		sz: 	2
> >>>		result: 	nil
> >>>		searchedSoFar: 	0
> >>>		target: 	''
> >>>
> >>>''
> >>>	Receiver''s instance variables:
> >>>		recentlyRead: 	0
> >>>		socket: 	a Socket[connected]
> >>>		inBuffer: 	''...etc...
> >>>		outBuffer: 	''P 
> >>>		???t????$5????>mK????I????1???????R@????A???sb???iE???????=F
???-Y4???
???????	??????S????y????d?????????????9
%???????????????????????...etc...
> >>>		inNextToWrite: 	1
> >>>		outNextToWrite: 	1
> >>>		lastRead: 	0
> >>>		timeout: 	45
> >>>		autoFlush: 	true
> >>>		bufferSize: 	4096
> >>>		binary: 	false
> >>>		shouldSignal: 	true
> >>>
> >>>SocketStream>>upToAll:
> >>>	Receiver: SocketStream[inbuf:4kb/outbuf:8kb]
> >>>	Arguments and temporary variables:
> >>>		aStringOrByteArray: 	''
> >>>
> >>>''
> >>>	Receiver''s instance variables:
> >>>		recentlyRead: 	0
> >>>		socket: 	a Socket[connected]
> >>>		inBuffer: 	''...etc...
> >>>		outBuffer: 	''P 
> >>>		???t????$5????>mK????I????1???????R@????A???sb???iE???????=F
???-Y4???
???????	??????S????y????d?????????????9
%???????????????????????...etc...
> >>>		inNextToWrite: 	1
> >>>		outNextToWrite: 	1
> >>>		lastRead: 	0
> >>>		timeout: 	45
> >>>		autoFlush: 	true
> >>>		bufferSize: 	4096
> >>>		binary: 	false
> >>>		shouldSignal: 	true
> >>>
> >>>WebResponse>>readFrom:
> >>>	Receiver: <<error during printing>>
> >>>	Arguments and temporary variables:
> >>>		aStream: 	SocketStream[inbuf:4kb/outbuf:8kb]
> >>>		tokens: 	nil
> >>>	Receiver''s instance variables:
> >>>		stream: 	SocketStream[inbuf:4kb/outbuf:8kb]
> >>>		protocol: 	nil
> >>>		headers: 	nil
> >>>		content: 	nil
> >>>		request: 	WebRequest(PUT /trunk/Files-tpr.179.mcz 
> >>>		HTTP/1.1
> >>>
> >>>Content-Length: 1131...etc...
> >>>		status: 	nil
> >>>		code: 	nil
> >>>		url: 	nil
> >>>
> >>>WebClient>>sendRequest:contentBlock:
> >>>	Receiver: WebClient(Connected: http://source.squeak.org)
> >>>	Arguments and temporary variables:
> >>>		request: 	WebRequest(PUT /trunk/Files-tpr.179.mcz 
> >>>		HTTP/1.1
> >>>
> >>>Content-Length: 1131...etc...
> >>>		contentBlock: 	[closure] in 
> >>>		WebClient>>sendRequest:content:size:
> >>>		response: 	nil
> >>>		repeatRedirect: 	false
> >>>		repeatAuth: 	false
> >>>		resp: 	nil
> >>>	Receiver''s instance variables:
> >>>		flags: 	7
> >>>		server: 	''source.squeak.org''
> >>>		scheme: 	''http''
> >>>		timeout: 	45
> >>>		stream: 	SocketStream[inbuf:4kb/outbuf:8kb]
> >>>		cookies: 	an OrderedCollection()
> >>>		proxyServer: 	nil
> >>>		lastScheme: 	''http''
> >>>		lastServer: 	''source.squeak.org''
> >>>		lastPort: 	80
> >>>		maxRedirect: 	10
> >>>		redirections: 	a Dictionary()
> >>>		userAgent: 	''WebClient/1.5 (WebClient-Core-ul.113; 
> >>>		Squeak6.0alpha-17785; unix)''
> >>>		authParams: 	an 
> >>>		IdentityDictionary(#password->''parqparq'' 
> >>>		#username->''tpr'' )
> >>>		proxyParams: 	an IdentityDictionary()
> >>>		accessLog: 	nil
> >>>		debugLog: 	nil
> >>>
> >>>WebClient>>sendRequest:content:size:
> >>>	Receiver: WebClient(Connected: http://source.squeak.org)
> >>>	Arguments and temporary variables:
> >>>		request: 	WebRequest(PUT /trunk/Files-tpr.179.mcz 
> >>>		HTTP/1.1
> >>>
> >>>Content-Length: 1131...etc...
> >>>		contentStream: 	a ReadStream
> >>>		streamSize: 	113153
> >>>	Receiver''s instance variables:
> >>>		flags: 	7
> >>>		server: 	''source.squeak.org''
> >>>		scheme: 	''http''
> >>>		timeout: 	45
> >>>		stream: 	SocketStream[inbuf:4kb/outbuf:8kb]
> >>>		cookies: 	an OrderedCollection()
> >>>		proxyServer: 	nil
> >>>		lastScheme: 	''http''
> >>>		lastServer: 	''source.squeak.org''
> >>>		lastPort: 	80
> >>>		maxRedirect: 	10
> >>>		redirections: 	a Dictionary()
> >>>		userAgent: 	''WebClient/1.5 (WebClient-Core-ul.113; 
> >>>		Squeak6.0alpha-17785; unix)''
> >>>		authParams: 	an 
> >>>		IdentityDictionary(#password->''parqparq'' 
> >>>		#username->''tpr'' )
> >>>		proxyParams: 	an IdentityDictionary()
> >>>		accessLog: 	nil
> >>>		debugLog: 	nil
> >>>
> >>>WebClient>>httpPut:content:type:do:
> >>>	Receiver: WebClient(Connected: http://source.squeak.org)
> >>>	Arguments and temporary variables:
> >>>		urlString:  
> >>>		''http://source.squeak.org/trunk/Files-tpr.179.mcz''
> >>>		postData: 	#[80 75 3 4 20 0 0 0 8 0 137 102 102 76 235 
> >>>		107 114 35 16 0 0 0 14 0 ...etc...
> >>>		contentType: 	nil
> >>>		aBlock: 	[closure] in [] in HTTPSocket 
> >>>		class>>httpPut:to:user:passwd:
> >>>		request: 	WebRequest(PUT /trunk/Files-tpr.179.mcz 
> >>>		HTTP/1.1
> >>>
> >>>Content-Length: 1131...etc...
> >>>	Receiver''s instance variables:
> >>>		flags: 	7
> >>>		server: 	''source.squeak.org''
> >>>		scheme: 	''http''
> >>>		timeout: 	45
> >>>		stream: 	SocketStream[inbuf:4kb/outbuf:8kb]
> >>>		cookies: 	an OrderedCollection()
> >>>		proxyServer: 	nil
> >>>		lastScheme: 	''http''
> >>>		lastServer: 	''source.squeak.org''
> >>>		lastPort: 	80
> >>>		maxRedirect: 	10
> >>>		redirections: 	a Dictionary()
> >>>		userAgent: 	''WebClient/1.5 (WebClient-Core-ul.113; 
> >>>		Squeak6.0alpha-17785; unix)''
> >>>		authParams: 	an 
> >>>		IdentityDictionary(#password->''parqparq'' 
> >>>		#username->''tpr'' )
> >>>		proxyParams: 	an IdentityDictionary()
> >>>		accessLog: 	nil
> >>>		debugLog: 	nil
> >>>
> >>>[] in HTTPSocket class>>httpPut:to:user:passwd:
> >>>	Receiver: HTTPSocket
> >>>	Arguments and temporary variables: <<error during printing>
> >>>	Receiver''s instance variables:
> >>>		superclass: 	Object
> >>>		methodDict: 	a MethodDictionary()
> >>>		format: 	0
> >>>		instanceVariables: 	nil
> >>>		organization: 	(''as yet unclassified'')
> >>>
> >>>		subclasses: 	nil
> >>>		name: 	#HTTPSocket
> >>>		classPool: 	a Dictionary(#HTTPBlabEmail->'''' 
> >>>		#HTTPPort->80 #HTTPProxyCredentials-...etc...
> >>>		sharedPools: 	nil
> >>>		environment: 	Smalltalk
> >>>		category: 	#''Network-Protocols''
> >>>
> >>>BlockClosure>>ensure:
> >>>	Receiver: [closure] in HTTPSocket class>>httpPut:to:user:passwd:
> >>>	Arguments and temporary variables:
> >>>		aBlock: 	[closure] in HTTPSocket 
> >>>		class>>httpPut:to:user:passwd:
> >>>		complete: 	nil
> >>>		returnValue: 	nil
> >>>	Receiver''s instance variables:
> >>>		outerContext: 	HTTPSocket class>>httpPut:to:user:passwd:
> >>>		startpc: 	165
> >>>		numArgs: 	0
> >>>
> >>>HTTPSocket class>>httpPut:to:user:passwd:
> >>>	Receiver: HTTPSocket
> >>>	Arguments and temporary variables:
> >>>		contents: 	#[80 75 3 4 20 0 0 0 8 0 137 102 102 76 235 
> >>>		107 114 35 16 0 0 0 14 0 ...etc...
> >>>		url: 	''http://source.squeak.org/trunk/Files-tpr.179.mcz''
> >>>		user: 	''tpr''
> >>>		passwd: 	''parqparq''
> >>>		urlString:  
> >>>		''http://source.squeak.org/trunk/Files-tpr.179.mcz''
> >>>		xhdrs: 	''''
> >>>		client: 	WebClient(Connected: 
> >>>		http://source.squeak.org)
> >>>		resp: 	#(nil)
> >>>	Receiver''s instance variables:
> >>>		superclass: 	Object
> >>>		methodDict: 	a MethodDictionary()
> >>>		format: 	0
> >>>		instanceVariables: 	nil
> >>>		organization: 	(''as yet unclassified'')
> >>>
> >>>		subclasses: 	nil
> >>>		name: 	#HTTPSocket
> >>>		classPool: 	a Dictionary(#HTTPBlabEmail->'''' 
> >>>		#HTTPPort->80 #HTTPProxyCredentials-...etc...
> >>>		sharedPools: 	nil
> >>>		environment: 	Smalltalk
> >>>		category: 	#''Network-Protocols''
> >>>
> >>>[] in MCHttpRepository>>writeStreamForFileNamed:replace:do:
> >>>	Receiver: a MCHttpRepository(http://source.squeak.org/trunk)
> >>>	Arguments and temporary variables: <<error during printing>
> >>>	Receiver''s instance variables:
> >>>		creationTemplate: 	''MCHttpRepository
> >>>	location: ''''http://source.squeak.org/trunk...etc...
> >>>		storeDiffs: 	nil
> >>>		cache: 	a Dictionary(''Compiler-eem.373.mcz''->a 
> >>>		MCVersion(Compiler-eem.373) ''EToy...etc...
> >>>		allFileNamesCache: 	nil
> >>>		allVersionNamesCache: 	nil
> >>>		location: 	''http://source.squeak.org/trunk''
> >>>		user: 	''tpr''
> >>>		password: 	''parqparq''
> >>>		readerCache: 	a Dictionary(''Compiler-eem.373.mcz''->a 
> >>>		MCMczReader ''EToys-dtl.320....etc...
> >>>		indexed: 	nil
> >>>
> >>>BlockClosure>>on:do:
> >>>	Receiver: [closure] in 
> >>>	MCHttpRepository>>writeStreamForFileNamed:replace:do:
> >>>	Arguments and temporary variables:
> >>>		exceptionOrExceptionSet: 	HTTPProgress
> >>>		handlerAction: 	[closure] in [] in 
> >>>		MCHttpRepository>>displayProgress:during:
> >>>		handlerActive: 	true
> >>>	Receiver''s instance variables:
> >>>		outerContext:  
> >>>		MCHttpRepository>>writeStreamForFileNamed:replace:do:
> >>>		startpc: 	160
> >>>		numArgs: 	0
> >>>
> >>>[] in MCHttpRepository>>displayProgress:during:
> >>>	Receiver: a MCHttpRepository(http://source.squeak.org/trunk)
> >>>	Arguments and temporary variables: <<error during printing>
> >>>	Receiver''s instance variables:
> >>>		creationTemplate: 	''MCHttpRepository
> >>>	location: ''''http://source.squeak.org/trunk...etc...
> >>>		storeDiffs: 	nil
> >>>		cache: 	a Dictionary(''Compiler-eem.373.mcz''->a 
> >>>		MCVersion(Compiler-eem.373) ''EToy...etc...
> >>>		allFileNamesCache: 	nil
> >>>		allVersionNamesCache: 	nil
> >>>		location: 	''http://source.squeak.org/trunk''
> >>>		user: 	''tpr''
> >>>		password: 	''parqparq''
> >>>		readerCache: 	a Dictionary(''Compiler-eem.373.mcz''->a 
> >>>		MCMczReader ''EToys-dtl.320....etc...
> >>>		indexed: 	nil
> >>>
> >>>[] in [] in MorphicUIManager>>displayProgress:at:from:to:during:
> >>>	Receiver: a MorphicUIManager
> >>>	Arguments and temporary variables: <<error during printing>
> >>>	Receiver''s instance variables:
> >>>		builderClass: 	MorphicToolBuilder
> >>>
> >>>BlockClosure>>on:do:
> >>>	Receiver: [closure] in [] in 
> >>>	MorphicUIManager>>displayProgress:at:from:to:during:
> >>>	Arguments and temporary variables:
> >>>		exceptionOrExceptionSet: 	ProgressNotification
> >>>		handlerAction: 	[closure] in [] in 
> >>>		MorphicUIManager>>displayProgress:at:from:to:during:...etc...
> >>>		handlerActive: 	true
> >>>	Receiver''s instance variables:
> >>>		outerContext: 	[] in 
> >>>		MorphicUIManager>>displayProgress:at:from:to:during:
> >>>		startpc: 	86
> >>>		numArgs: 	0
> >>>
> >>>
> >>>--- The full stack ---
> >>>SocketStream>>signalTimeout
> >>>[] in SocketStream>>waitForData
> >>>Socket>>waitForDataFor:ifClosed:ifTimedOut:
> >>>SocketStream>>waitForData
> >>>SocketStream>>receiveData
> >>>SocketStream>>upToAll:limit:
> >>>SocketStream>>upToAll:
> >>>WebResponse>>readFrom:
> >>>WebClient>>sendRequest:contentBlock:
> >>>WebClient>>sendRequest:content:size:
> >>>WebClient>>httpPut:content:type:do:
> >>>[] in HTTPSocket class>>httpPut:to:user:passwd:
> >>>BlockClosure>>ensure:
> >>>HTTPSocket class>>httpPut:to:user:passwd:
> >>>[] in MCHttpRepository>>writeStreamForFileNamed:replace:do:
> >>>BlockClosure>>on:do:
> >>>[] in MCHttpRepository>>displayProgress:during:
> >>>[] in [] in MorphicUIManager>>displayProgress:at:from:to:during:
> >>>BlockClosure>>on:do:
> >>>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> >>>[] in MorphicUIManager>>displayProgress:at:from:to:during:
> >>>BlockClosure>>ensure:
> >>>MorphicUIManager>>displayProgress:at:from:to:during:
> >>>ProgressInitiationException>>defaultResumeValue
> >>>ProgressInitiationException(Exception)>>resume
> >>>ProgressInitiationException>>defaultAction
> >>>UndefinedObject>>handleSignal:
> >>>ProgressInitiationException(Exception)>>signal
> >>>ProgressInitiationException>>display:at:from:to:during:
> >>>ProgressInitiationException class>>display:at:from:to:during:
> >>>ByteString(String)>>displayProgressAt:from:to:during:
> >>>ByteString(String)>>displayProgressFrom:to:during:
> >>>MCHttpRepository>>displayProgress:during:
> >>>MCHttpRepository>>writeStreamForFileNamed:replace:do:
> >>>MCHttpRepository(MCFileBasedRepository)>>writeStreamForFileNamed:do:
> >>>MCHttpRepository(MCFileBasedRepository)>>basicStoreVersion:
> >>>MCHttpRepository(MCRepository)>>storeVersion:
> >>>[] in MCWorkingCopyBrowser>>saveVersion
> >>>BlockClosure>>ensure:
> >>>CursorWithMask(Cursor)>>showWhile:
> >>>MCWorkingCopyBrowser>>saveVersion
> >>>PluggableButtonMorphPlus(PluggableButtonMorph)>>performAction
> >>>PluggableButtonMorphPlus>>performAction
> >>>[] in PluggableButtonMorphPlus(PluggableButtonMorph)>>mouseUp:
> >>>Array(SequenceableCollection)>>do:
> >>>PluggableButtonMorphPlus(PluggableButtonMorph)>>mouseUp:
> >>>PluggableButtonMorphPlus(Morph)>>handleMouseUp:
> >>>MouseButtonEvent>>sentTo:
> >>>PluggableButtonMorphPlus(Morph)>>handleEvent:
> >>>PluggableButtonMorphPlus(Morph)>>handleFocusEvent:
> >>>MorphicEventDispatcher>>doHandlingForFocusEvent:with:
> >>>MorphicEventDispatcher>>dispatchFocusEvent:with:
> >>>PluggableButtonMorphPlus(Morph)>>processFocusEvent:using:
> >>>PluggableButtonMorphPlus(Morph)>>processFocusEvent:
> >>>[] in [] in [] in HandMorph>>sendFocusEvent:to:clear:
> >>>BlockClosure>>ensure:
> >>>MouseButtonEvent(MorphicEvent)>>becomeActiveDuring:
> >>>[] in [] in HandMorph>>sendFocusEvent:to:clear:
> >>>BlockClosure>>ensure:
> >>>HandMorph>>becomeActiveDuring:
> >>>[] in HandMorph>>sendFocusEvent:to:clear:
> >>>BlockClosure>>ensure:
> >>>-- and more not shown --'
> >>>tim
> >>>--
> >>>tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim
> >>>Useful random insult:- Hid behind the door when they passed out brains.
> >>>
> >>>
> >>>
> >>

> 



More information about the Squeak-dev mailing list