![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
The Question is: It is oft-stated that many of the VMS runtime libraries are not "thread safe." I'm looking for clarification on this. If I call the CONV$ routines to perform a simple file copy operation from the default (initial) thread created by VMS for my application, it works correctly. If I make the identical call from within a thread created by my application with pthread_create( ), the call to CONV$CONVERT crashes with ACCVIO, signalled from within the bowels of PTHREAD$RTL, with CONV$SHR above it in the call chain. Here is the called function that is run from the thread: int convert_test() { long sts; $DESCRIPTOR( dsc$in, "input.dat" ); $DESCRIPTOR( dsc$out, "output.dat" ); sts = conv$pass_files( &dsc$in, &dsc$out ); if( !$VMS_STATUS_SUCCESS( sts )) lib$stop( sts ); sts = conv$pass_options(); if( !$VMS_STATUS_SUCCESS( sts )) lib$stop( sts ); sts = conv$convert(); if( !$VMS_STATUS_SUCCESS( sts )) lib$stop( sts ); return sts; } There are not multiple threads calling CONV$ at the same time; only a single instance calling from within an application-created thread (linked with threads and upcalls enabled). When Compaq says runtimes are not "thread safe" does this imply that they cannot be run from a thread at all (i.e. the execution environment of a thread is incompatable with the runtime in some way) or just that multiple threads using the runtime simultan eously are at risk? It would appear that for CONV$ at least, the answer is that the runtime environment of a thread is incompatable with the runtime? Or is this a "bug" in the CONV$ code that could be fixed -- I really want to use the service, and *promise* not to call it f rom more than one thread at a time... The Answer is : "thread safe: Refers to a routine that can be called simultaneously from multiple threads without risk of corruption. Refers to a library that typically consists of routines that do not themselves create or use threads but which can be called safely from applications that use threads." Also see: http://www.openvms.compaq.com:8000/72final/6493/6101pro_008.html#making_safe In this case, the OpenVMS Wizard would guess that the ACCVIO has little or nothing to do with thread safety, but may be due to insufficient stack space or potentially with the use of ASTs. Try increasing the size of the thread stack, and check for AST activity in the main thread. Related topics include (1661), (2681), (4647), and (6984).
|