Table E-1 lists the cma exceptions and gives an explanation of each. It also contains the recommended action you should take if an exception occurs.
Exception Explanation and User Action cma_e_alerted Thread execution was alerted Explanation: A thread was requested to terminate by either the cma_thread_alert or pthread_cancel routine. DECthreads uses an alert to request that a thread terminate after first performing cleanup and shutdown operations. User Action: If you do not want threads to terminate at the point where this alert is being delivered, you can use several routines (cma_alert_ disable_general, cma_alert_disable_asynch, cma_ alert_restore, pthread_setcancelstate, and pthread_ setcanceltype) to specify points in the thread process where alerts cannot be delivered to the thread. cma_e_alert_ Improper nesting of alert scope nesting Explanation: An attempt was made to restore an inner scope after an enclosing outer scope had already been restored. User Action: Examine the code to determine where the incorrect alert state variable was passed to the cma_alert_restore routine. cma_e_badparam Parameter to DECthreads operation is invalid Explanation: A parameter passed to a DECthreads routine is improper; for example, the value is of the wrong type or is out of range. User Action: Determine which routine raised the exception. Then consult the documentation to determine the correct parameters and value ranges. Update your code accordingly and retry the operation. If you continue to have problems, report it to Digital, including a small test program that reproduces the problem. cma_e_existence Object referenced does not currently exist Explanation: A DECthreads routine was requested to operate on an object that does not exist. User Action: Consult the documentation for the DECthreads routine that issued this message to determine the conditions that caused it. Also check the program where the call is issued to determine which object or objects that are being passed as parameters do not currently exist. cma_e_exit_ Current thread was requested to exit thread Explanation: The cma_thread_exit routine was called to force the thread to shut down in an orderly fashion. This message notifies all active exception handlers to perform any necessary cleanup activities. User Action: None cma_e_inialrpro DECthreads initialization is already in progress Explanation: A call was made to the DECthreads initialization routine cma_init while DECthreads was still trying to initialize itself on a prior call. DECthreads initialization must be complete before any DECthreads routines are used. Once DECthreads is fully initialized, all calls to cma_ init complete successfully. User Action: Remove the offending concurrent call to the cma_init routine or delay it until the first call to cma_init has completed. cma_e_in_use Object referenced is already in use Explanation: The DECthreads operation cannot be performed on the specified object because it is already in use; for example, the routine is attempting to delete a mutex that is locked. User Action: Determine which routine caused the error and make sure the object is in an appropriate state before attempting the operation. cma_e_ No space is currently available to create a new nostackmem stack Explanation: A call to cma_thread_create or another DECthreads routine requires that a new stack be created, but there is insufficient space to create it. User Action: Reduce the size of thread stacks previously created, so that additional stacks may be created. Alternatively, adjust system or user quotas to allow the allocation of more virtual memory. cma_e_stackovf Attempted stack overflow was detected Explanation: A thread overflowed its stack. User Action: Recreate the thread with a larger stack or redesign the code to require less stack space; for example, nest your calls less deeply or allocate less storage on the stack. cma_e_unimp The specified DECthreads feature is not implemented Explanation: You attempted to use a feature that is not implemented in the version of DECthreads that you are running. This error can occur when a program developed on a system running a higher version of DECthreads is executed on a system that is running a lower version of DECthreads. User Action: Use a higher version of DECthreads that supports the feature or do not attempt to use the feature with a lower version of DECthreads. cma_e_uninitexc Uninitialized exception raised Explanation: Code using the EXC_HANDLING.H package, which provides portable exceptions for the C language, attempted to raise an exception that has not been initialized. User Action: Check the error messages to determine the program location where the uninitialized exception is being raised. Use the EXCEPTION_INIT macro defined in the EXC_HANDLING.H package to initialize the exception. cma_e_unkstatus Unknown exception reported Explanation: A status exception was raised for which DECthreads is unable to provide a meaningful text translation. User Action: Check the value of the status with which the exception object was initialized to make sure it has a proper text translation. cma_e_use_error Requested operation is inappropriate for the specified object Explanation: The state or type of an object is inappropriate for the operation; for example, the operation attempts to unlock a mutex that is not locked. User Action: Determine which routine caused the error and consult the documentation to learn which object states are appropriate for the routine. cma_e_ Wrong mutex specified in condition wait wrongmutex Explanation: A thread attempted to wait for a condition variable that already has at least one thread waiting and that thread has specified a different mutex. DECthreads requires that all threads concurrently waiting for a condition variable specify the same mutex. User Action: Design your code so that each condition variable represents a particular state of shared data that is protected by a given mutex.
See Table 5-1 for a list of pthread exceptions. Most pthread exceptions correspond directly to a cma interface exception.