public void run()
{
Thread.SetData( Thread.GetNamedDataSlot( "bgldynamic" ),
new bgldynamic( bgldynamic.abgldynamic.get() ) );
Thread.SetData( Thread.GetNamedDataSlot( "bglthread" ), thread );
Thread.SetData( Thread.GetNamedDataSlot( "bglcthread" ), this );
try {
thunk.funcall0();
} catch( Exception e ) {
foreign.internalerror( e );
} finally {
bglpmutex.mutexes_unlock( thread );
if( cleanup is procedure ) {
((procedure)cleanup).funcall1( thread );
}
}
}