I am uploading an enhanced version of the -unique patch for
tclWinDde.c. This addresses concerns about locking the tcl
application in the event of badly behaved windows applications.
What I have done here is to factor out the implementation of
dde services into a separate function
DdeGetServicesList(interp, appname, topicname). This builds
the services list and returns the list as the interp's result.
Secondly I've reimplemented this function in terms of raw
DDE calls using SendMessageTimeout. I have left the original
code in for reference #ifdef'd out which also helps to
bracket the collection of functions required to implement
the new functionality.
The new services function will ignore servers that are not
processing messages. It also fixes bug #219155 as dde
services {} $topic works as described.
The new code is only accessed from the services command -
and from the servername command unless -exact is specified.
Following on from this in the future, I could see a case for
reimplementing the remainder of the Dde package in raw dde
and putting it onto a secondary thread. This would mean that
tclsh using dde would be a 'well behaved' windows
application - at least for dde. I do not know if it's
sufficiently worth it though. Having all dde calls using
SendMessageTimeout is a pretty significant plus though.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
text/plain
Logged In: YES
user_id=202636
I am uploading an enhanced version of the -unique patch for
tclWinDde.c. This addresses concerns about locking the tcl
application in the event of badly behaved windows applications.
What I have done here is to factor out the implementation of
dde services into a separate function
DdeGetServicesList(interp, appname, topicname). This builds
the services list and returns the list as the interp's result.
Secondly I've reimplemented this function in terms of raw
DDE calls using SendMessageTimeout. I have left the original
code in for reference #ifdef'd out which also helps to
bracket the collection of functions required to implement
the new functionality.
The new services function will ignore servers that are not
processing messages. It also fixes bug #219155 as dde
services {} $topic works as described.
The new code is only accessed from the services command -
and from the servername command unless -exact is specified.
Following on from this in the future, I could see a case for
reimplementing the remainder of the Dde package in raw dde
and putting it onto a secondary thread. This would mean that
tclsh using dde would be a 'well behaved' windows
application - at least for dde. I do not know if it's
sufficiently worth it though. Having all dde calls using
SendMessageTimeout is a pretty significant plus though.
text/plain
Logged In: YES
user_id=202636
Crap - attaching the patch file this time :)
Logged In: YES
user_id=202636
TIP #130 passed. Patch applied