From: Andrew W. <an...@aa...> - 2001-08-24 09:35:13
|
[wups, I forgot to cc the list] Hi Daniel, Daniel A. Steffen: > >while testing some tcl/tk applications I sometimes run into a bug > >that is big enough to crash MacOS 9x - typically the window manager > >locks up, clicking on icons doesn't work, that sort of thing. > >Force Quit isn't enough to free up the system so eventually I have > >to reset the machine. > > that's a pretty bad bug that shouldn't happen, I haven't seen > anything of the sort using Mac Tcl/Tk with a variety of software, if > you can give more explicit details about your crashes, I would be > interested to see if I can reproduce them. You're not going to like this... --- cut here --- set conn [socket "www.yahoo.com" 80] --- cut here --- Run the script on MacOS 9.x and use the left-hand button in the wish window to perform the quit. I'm on the end of a modem in the UK and yahoo.com is > 200ms away, ping-time. It's not just Yahoo, and it's not just webservers; pretty much any distant host/port will cause this problem. Interestingly the same problem doesn't occur when the host/port is on my local network, ping times < 1.5 ms. The essence of the bug is that calling 'destroy .' before the connection-closure has had time to register with the OS, seems to lock the machine. Here's a more elaborate script that gives some clues: --- cut here --- wm protocol . WM_DELETE_WINDOW shutdown set conn [socket "www.yahoo.com" 80] proc shutdown {} { global conn close $conn after 500 destroy . } --- cut here --- Changing the 500ms delay to something like 1000ms will cure the bug. The connection 'has time' to close. So, this bug seems to come about for clients that are a long way from the server. Another way to provoke a crash, perhaps indicating the same bug is: o turn your modem on o run example 1 o turn your modem off (if your modem isn't connected directly to the Mac then turning it off won't signal a disconnection. my modem is connected to the firewall machine, not the iBook) o now try to quit the script This method doesn't always cause the crash however. In this case the iBook seems to see a server that has suddenly stopped responding, 'perhaps the network is congested'. Perhaps the OS is looking for confirmation from the host that it's disconnecting. I dunno enough about TCP/IP to know what kind of low-level handshaking is going on between MacOS and the remote server. But it sure looks like MacOS is looking for some external confirmation that the connection has been dropped before clearing up. > >Sometimes, after such a reset, an existing application built by > >the 'Drag & Drop Tclets' app will stop working. eg, when running > >8.3.3 I'll sometimes see a dialog box saying that the application > >couldn't be run because tcl8.3 couldn't be found. I check the file > >system and all the folders and libraries are in the usual place, > >nothing obviously missing. > > I have seen this behaviour occasionally myself, it is due to a MacOS > bug. There is a much easier fix, just move your 'Tool Command > Language' folder out of your Extensions folder e.g. onto the desktop > and then drop it right back into Extensions... that fixes things for > me. (I think the bug is due to code fragment manager caches to shared > libraries getting corrupted when aliases to shared libraries on > volumes other than the startup volume are involved, so another > possible workaround is to copy the actual libraries into 'Tool > Command Language', replacing the aliases. I have also noticed a > dependency on File Sharing, when it is enabled the problem seems to > occur more often) Handy to know ;) > Cheers, > > Daniel > -- > ** Daniel A. Steffen ** "And now to something completely > ** Department of Mathematics ** different" Monty Python > ** Macquarie University ** <mailto:st...@ma...> > ** NSW 2109 Australia ** <http://www.maths.mq.edu.au/~steffen/> Cheers, Ay. an...@aw... Cell: 07889 61 61 44 Voice/Fax: +44 (0) 1865 513 091 |