Alrighty, took a bit longer to recreate this time for whatever reason. I made the changes you suggested, but in the line printf( "ITFREE: thread handle:%x thread-id: %dx\n", thread->handle, GetThreadId( thread->handle ) );
i changed thread->handle
to just 'handle' since it looks they already freed that pointer at that point.
I attached the log of this run below in the files called serverOutput2.txt, it exited with a different error this time,
Join failed with 'Inappropriate I/O control operation' : 'The handle i
at rxd.pl line 1128.
The RXD server has been shutdown.Perl exited with active threads:
151 running and unjoined
4 finished and unjoined
0 running and detached
Which again appears to be related to the thread handle.
Sorry about the complicated protocol. People I work with did not wish to go through the trouble of having much back and forth communication between the client/server, and rather just send command once, receive response, and still needed a way to transfer a 400MB file. So this is what we (I) came up with (you should have seen the earlier version). I've attached the client (rx.pl) as well as the test script i used to recreate this issue. (i also included the server, rxd.pl, with all other commands besides exec stripped out except for EXEC to shorten the code. And included the exact threads.xs used to compile the threads module)
Thanks again for the help.