Great, Brian.
I successfully reproduced the state with a very
simple application. Here is very dumb python program that uses the
CLR:
from CLR.System import String
class cSharpCaller( object ):
def __init__( self ):
print
"Created a cSharpCaller instance"
self.__cSharpString = None
def createCSharpString( self,
str ):
self.__cSharpString =
String( str )
def returnCSharpString( self
):
return
self.__cSharpString.ToString()
And if I test this with this (dumb) threethreaded
testprogram:
import threading, thread, time
from cSharpCaller import cSharpCaller
def start_threads(amount=5):
for i in range(amount):
thread = threading.Thread(target=process_thread
)
print "starting thread ",
thread.getName()
thread.start()
def process_thread( ):
print "thread started "
for i in range( 2
):
print "Hi, I'm a
thread"
time.sleep( 1
)
cs = cSharpCaller( )
cs.createCSharpString( "created from a thread" )
print
"cs.returnCSharpString() = ", cs.returnCSharpString()
print "thread %s ended"
start_threads( 3 )
I get this output:
starting thread thread0
thread
started
Hi, I'm thread %s
starting thread thread1
thread
started
Hi, I'm thread %s
starting thread thread2
thread
started
Hi, I'm thread %s
Hi, I'm thread %s
Hi, I'm thread %s
Hi,
I'm thread %s
Created a cSharpCaller instance
Created a cSharpCaller
instance
cs.returnCSharpString() =
and I have to CTRL+Pause to get out of the hang.
Clearly hangs on the first String.ToString() method call.
Regards,
Torgeir