[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference clt::cma

Title:DECthreads Conference
Moderator:PTHRED::MARYSTEON
Created:Mon May 14 1990
Last Modified:Fri Jun 06 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:1553
Total number of notes:9541

1551.0. "Program hangs on pthread_join when compiled with c++" by PEACHS::LAMPERT (Pat Lampert, UNIX Applications Support, 343-1050) Fri May 30 1997 19:19

This may turn into an IPMT later on, but John Reguerra
suggested I post it here first.

We have a UNIX 3.2g customer (Bankers Trust) that sees
their C program hang, waiting forever on pthread_join,
when they compile the code with c++ (5.5 or 5.6). The
same exact code, using the same switches runs fine when
compiled with cc or cc -newc.

I dialed in and ran the debugger. The output is included
below.

Also the source to the program (minus lots of header 
files and required libraries is also included).

I havent been able to explain why its hanging or solve 
this. Any insights?

Pat

-----------------



NYCSEX0000.btco.com> ladebug -pid 3041 ./fsdxSubThreads
Welcome to the Ladebug Debugger Version 4.0-37
------------------
object file name: ./fsdxSubThreads
Reading symbolic information ...done
Attached to process id 3041  ....
Thread received signal INT
stopped at [msg_receive_trap 0x3ff8052e574]
(ladebug) where
>0  0x3ff8052e574 in msg_receive_trap(0x20202041445f4f42, 0x20204f4220202020, 0x2020202020202020, 0x39, 0x3ff804c55ac, 0x1) DebugInf
ormationStrippedFromFile19
#1  0x3ff80524dd0 in msg_receive(0x3ff80577fdc, 0x0, 0x0, 0x0, 0x1, 0x11ffff1a8) DebugInformationStrippedFromFile6
#2  0x3ff805885dc in cma__vp_sleep(0x2801fd4558, 0x0, 0x6, 0x0, 0x3ff00000000, 0x3ffc0093530) DebugInformationStrippedFromFile106
#3  0x3ff8056e958 in cma__dispatch(0x6, 0x0, 0x3ff00000000, 0x3ffc0093530, 0x3ff80567e34, 0x3ffc00802b8) DebugInformationStrippedFro
mFile85
#4  0x3ff80567e30 in cma__int_wait(0x11ffff358, 0x2d218, 0x3ffc01de9f8, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile3
#5  0x3ff805811e0 in cma_thread_join(0x11ffff778, 0x11ffffb20, 0x11ffffb18, 0x3ff80581bf0, 0x0, 0x3ffc01e3de0) DebugInformationStrip
pedFromFile101
#6  0x3ff80577508 in pthread_join(0x32c18, 0x400000000000008, 0x11ffffc28, 0x3ffc01de9f8, 0x1200156b0, 0x2d418) DebugInformationStri
ppedFromFile95
#7  0x120015724 in main() fsdxSubThreads.cxx:293


---------------------
NYCSEX0000.btco.com> ladebug fsdxSubThreads
Welcome to the Ladebug Debugger Version 4.0-37
------------------
object file name: fsdxSubThreads
Reading symbolic information ...done
(ladebug) stop at 292
[#1: stop at "fsdxSubThreads.cxx":293 ]
(ladebug) run
opened map file
Sucessfully parsed map file
calling open
opened dsv
regis map file 1
0
1
[1] stopped at [int main(void):293 0x120015700]
    293   trdStatus = pthread_join (threads[workerNum], (pthread_addr_t *)&exitValue);

(ladebug) s
2
trd0trd1trd2trd0Thread received signal INT
stopped at [msg_receive_trap 0x3ff8100e574]
(ladebug) where
>0  0x3ff8100e574 in msg_receive_trap(0x20202041445f4f42, 0x20204f4220202020, 0x2020202020202020, 0x39, 0x3ff820355ac, 0x1) DebugInf
ormationStrippedFromFile19
#1  0x3ff81004dd0 in msg_receive(0x3ff80837fdc, 0x0, 0x0, 0x0, 0x1, 0x11ffff1a8) DebugInformationStrippedFromFile6
#2  0x3ff808485dc in cma__vp_sleep(0x2801fd4558, 0x0, 0x7, 0x0, 0x3ff00000000, 0x3ffc2813530) DebugInformationStrippedFromFile106
#3  0x3ff8082e958 in cma__dispatch(0x7, 0x0, 0x3ff00000000, 0x3ffc2813530, 0x3ff80827e34, 0x3ffc28002b8) DebugInformationStrippedFro
mFile85
#4  0x3ff80827e30 in cma__int_wait(0x11ffff358, 0x2d218, 0x3ffc049e9f8, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile3
#5  0x3ff808411e0 in cma_thread_join(0x11ffff778, 0x11ffffb20, 0x11ffffb18, 0x3ff80841bf0, 0x0, 0x3ffc01e3de0) DebugInformationStrip
pedFromFile101
#6  0x3ff80837508 in pthread_join(0x32c18, 0x400000000000008, 0x11ffffc28, 0x3ffc049e9f8, 0x1200156b0, 0x2d418) DebugInformationStri
ppedFromFile95
#7  0x120015724 in main() fsdxSubThreads.cxx:293
(ladebug) call cma_debug()

DECthreads debug> mutex
Mutex 81 (recursive) "<pthread user@0x43f88>" is not locked
Mutex 82 (recursive) "<pthread user@0x3fffffba400>" is locked by 6 (depth 1), 1
  thread waiting
Mutex 84 (fast) "<pthread user@0x3fffffee1f0>" is not locked
Mutex 85 (fast) "<pthread user@0x3fffffba490>" is not locked
Mutex 99 (fast) "<pthread user@0x140000568>" is locked, 2 threads waiting
Mutex 100 (fast) "<pthread user@0x140000578>" is not locked
Mutex 108 (fast) "<pthread user@0x3fffffba290>" is not locked

DECthreads debug> condition
Condition variable 3, "<pthread user@0x4a080>" has no waiters
Condition variable 4, "<pthread user@0x39e80>" has no waiters
Condition variable 7, "<pthread user@0x49ae8>" has no waiters
Condition variable 10, "<pthread user@0x41ac8>" has no waiters
Condition variable 11, "<pthread user@0x41aa8>" has 1 waiter using mutex 84
Condition variable 16, "<pthread user@0x418c8>" has 1 waiter using mutex 84
Condition variable 17, "<pthread user@0x418a8>" has 1 waiter using mutex 84
Condition variable 18, "<pthread user@0x140000588>" has no waiters
Condition variable 29, "<pthread user@0x49550>" has no waiters

DECthreads debug> thread -i -f
Thread 1 (blocked, cond wait) "default thread" (0x3ffc049e9f8)
  Waiting on condition variable 19 using mutex 101
  Scheduling: throughput policy at priority 19
  No thread specific data
  (*)Stack: 0x11fffecc8 (default stack)
  General cancelability enabled, asynch cancelability disabled
  Current vp is 6, synch port is 7
    VP state is run: Mach policy throughput, priority 19 (RT kernel), state
      running; synch port has 0 messages out of 1
  Join uses mutex 21 and condition variable 1; wait uses mutex 22 and
    condition variable 2
  The thread's start function and argument are unknown
  The thread's latest errno is 0
Thread 3 (running) "<pthread user@0x3ffc04a7aa8>" (0x33818)
  Scheduling: throughput policy at priority 19
  personal pending wake is set
  No thread specific data
  Stack: 0x3ffc04b0000; base is 0x3ffc04b0000, guard area at 0x3ffc04a9fff
  Detached
  General cancelability enabled, asynch cancelability disabled
  Current vp is 12, synch port is 13
    VP state is <unknown-wait> (hold): Mach policy throughput, priority 19 (RT
      kernel), state waiting; synch port has 0 messages out of 1
  Join uses mutex 91 and condition variable 8; wait uses mutex 92 and
    condition variable 9
  The thread's start function and argument are 0x3ffbffd2630 (0x41a08)
  The thread's latest errno is 0
Thread 4 (blocked, cond wait) "<pthread user@0x3ffc04afa70>" (0x33c18)
  Waiting on condition variable 11 using mutex 84
  Scheduling: throughput policy at priority 19
  No thread specific data
  Stack: 0x3ffc04a8000; base is 0x3ffc04a8000, guard area at 0x3ffc04a1fff
  Detached
  General cancelability enabled, asynch cancelability disabled
  Current vp is 9, synch port is 10
    VP state is susp (hold): Mach policy throughput, priority 19 (RT kernel),
      state waiting; synch port has 0 messages out of 1
  Join uses mutex 86 and condition variable 5; wait uses mutex 87 and
    condition variable 6
  The thread's start function and argument are 0x3ffbffd3150 (0x41a08)
  The thread's latest errno is 0
Thread 6 (blocked, cond wait) "<pthread user@0x3ffc04b7aa8>" (0x33018)
  Waiting on condition variable 16 using mutex 84
  Scheduling: throughput policy at priority 19
  No thread specific data
  Stack: 0x3ffc04c0000; base is 0x3ffc04c0000, guard area at 0x3ffc04b9fff
  Detached
  General cancelability enabled, asynch cancelability disabled
  Current vp is 18, synch port is 19
    VP state is susp (hold): Mach policy throughput, priority 19 (RT kernel),
      state waiting; synch port has 0 messages out of 1
  Join uses mutex 97 and condition variable 14; wait uses mutex 98 and
    condition variable 15
  The thread's start function and argument are 0x3ffbffd2630 (0x41808)
  The thread's latest errno is 0
  The thread has mutexes locked: 82
Thread 7 (blocked, cond wait) "<pthread user@0x3ffc04bfa70>" (0x33418)
  Waiting on condition variable 17 using mutex 84
  Scheduling: throughput policy at priority 19
  No thread specific data
  Stack: 0x3ffc04b8000; base is 0x3ffc04b8000, guard area at 0x3ffc04b1fff
  Detached
  General cancelability enabled, asynch cancelability disabled
  Current vp is 15, synch port is 16
    VP state is susp (hold): Mach policy throughput, priority 19 (RT kernel),
      state waiting; synch port has 0 messages out of 1
  Join uses mutex 93 and condition variable 12; wait uses mutex 94 and
    condition variable 13
  The thread's start function and argument are 0x3ffbffd3150 (0x41808)
  The thread's latest errno is 0
Thread 0 (blocked, mutex wait) "<pthread user@0x140000598>" (0x32c18)
  Waiting to lock mutex 99
  Scheduling: throughput policy at priority 19
  There is 1 thread waiting to join
  No thread specific data
  Stack: 0x3ffc04c8000; base is 0x3ffc04c8000, guard area at 0x3ffc04c1fff
  General cancelability disabled, asynch cancelability disabled
  Current vp is 21, synch port is 22
    VP state is susp (hold): Mach policy throughput, priority 19 (RT kernel),
      state waiting; synch port has 0 messages out of 1
  Join uses mutex 101 and condition variable 19; wait uses mutex 102 and
    condition variable 20
  The thread's start function and argument are 0x120014dd0 (0x0)
  The thread's latest errno is 1
  The thread has mutexes locked: 99
Thread 0 (blocked, mutex wait) "<pthread user@0x1400005a8>" (0x32818)
  Waiting to lock mutex 82
  Scheduling: throughput policy at priority 19
  personal pending wake is set
  No thread specific data
  Stack: 0x3ffc04d0000; base is 0x3ffc04d0000, guard area at 0x3ffc04c9fff
  General cancelability disabled, asynch cancelability disabled
  Current vp is 24, synch port is 25
    VP state is susp (hold): Mach policy throughput, priority 19 (RT kernel),
      state waiting; synch port has 0 messages out of 1
  Join uses mutex 103 and condition variable 21; wait uses mutex 104 and
    condition variable 22
  The thread's start function and argument are 0x120014dd0 (0x1)
  The thread's latest errno is 0
  The thread has mutexes locked: 99
Thread 0 (blocked, mutex wait) "<pthread user@0x1400005b8>" (0x32418)
  Waiting to lock mutex 99
  Scheduling: throughput policy at priority 19
  No thread specific data
  Stack: 0x3ffc04d8000; base is 0x3ffc04d8000, guard area at 0x3ffc04d1fff
  General cancelability disabled, asynch cancelability disabled
  Current vp is 27, synch port is 28
    VP state is susp (hold): Mach policy throughput, priority 19 (RT kernel),
      state waiting; synch port has 0 messages out of 1
  Join uses mutex 105 and condition variable 23; wait uses mutex 106 and
    condition variable 24
  The thread's start function and argument are 0x120014dd0 (0x2)
  The thread's latest errno is 0
  The thread has mutexes locked: 99
DECthreads debug>
DECthreads debug> stack
Thread 1 stack: 0x4000000 to 0x11fffffff (469762047 bytes)
Thread 3 stack: 0x3ffc04a8000 to 0x3ffc04b0000 (32768 bytes)
Thread 4 stack: 0x3ffc04a0000 to 0x3ffc04a8000 (32768 bytes)
Thread 6 stack: 0x3ffc04b8000 to 0x3ffc04c0000 (32768 bytes)
Thread 7 stack: 0x3ffc04b0000 to 0x3ffc04b8000 (32768 bytes)
Thread 0 stack: 0x3ffc04c0000 to 0x3ffc04c8000 (32768 bytes)
Thread 0 stack: 0x3ffc04c8000 to 0x3ffc04d0000 (32768 bytes)
Thread 0 stack: 0x3ffc04d0000 to 0x3ffc04d8000 (32768 bytes)
DECthreads debug>DECthreads debug> attributes
Attributes object 1 "default attr"
  Scheduling: policy throughput, priority 19; inherit scheduling
  Threads created joinable
  Stack size 21120, guard size 2048
  Mutex type fast
Attributes object 4 "<pthread user(thread)@0x11ffffba0>"
  Scheduling: policy throughput, priority 19; inherit scheduling
  Threads created joinable
  Stack size 1024000, guard size 2048
  Mutex type fast
DECthreads debug>

==================================================================

//
//	Here is the source code to the program which hangs.
//	The sources to libfsdx.so are not available.
//
/***********************************************************************
*
*  Facility    :  FSDX
*                 Financial Services Data Exchange Message
*
*  Module      :  FSDX Subscriber
*
*  Description :  This module will sequentially read all records from a
safestore
*
*  Notes       :
*
*  Modification History :
*
*   #    date      by   reason
*   ---  --------  ---  ---------------------------------------------
*   000  8/27/96    mm   created
*
*******************************************************************/
#include <fsdxSubThreads.h>

#undef   MODULE_NAME
#define  MODULE_NAME   "FsdxSubThreads"

FSDX_CTXHANDLE   channel;
FSDX_STATUS      fsdxStatus;

/*******************************************************************************
//  Worker Thread Routine -
//      Worker routine begins with a cond wait to synchronize the workers and
// the parent. Each worker thread then takes a turn taking a number which
// it will test for primeness
/*******************************************************************************

void
fsdxReads (pthread_addr_t arg)
{
    long           myNumber;  // Worker thread identifier
    int         trdStatus;  // Hold status from pthread calls

    int            recsRead=0;
    int            errBuffLen=128;
    char           errBuff[128];
    char         messageBuffer[10000];
    char          *messageMapReturned,
        *userBuffer = messageBuffer,
        *expirationTime;
    FSDX_SEQNO     seqNo;


    myNumber = (long)arg;
    fprintf(stderr, "%d\n", myNumber);
    fflush(stderr);
      // Synchronize threads and parent using a condition variable, of which
      // predicate (thread_hold) will be set by the parent.

    trdStatus = pthread_mutex_lock(&condMutex);
    check(trdStatus,"1:Mutex Lock Bad Status\n");

    while (threadHold)
    {
        trdStatus = pthread_cond_wait(&condVar, &condMutex);
        check(trdStatus,"2:Ccond_wait, bad status\n");
    }

    trdStatus = pthread_mutex_unlock(&condMutex);
    check(trdStatus,"3:Mutex unlock bad status");

    messageMapReturned=(char *)malloc(sizeof(char) * 100);

      // Perform reads until bad status is found

    while (1)
    {
          // Cancelation point
        pthread_testcancel();

          // Explicitly turn off all cancels
        pthread_setcancel(CANCEL_OFF);

        trdStatus = pthread_mutex_lock(&fsdxMutex);
        check(trdStatus,"4:fsdxMutex Lock Bad Status\n");

        if (!((fsdxStatus == FSDX_S_SUCCESS) ||
              (fsdxStatus == FSDX_S_HARD_READ)))
        {
            trdStatus = pthread_mutex_unlock(&fsdxMutex);
            check(trdStatus,"4:fsdxMutex unlock bad status");
            break;
        }

        fsdxStatus = FsdxSubReadNextSync(
            channel,
            messageMapReturned,
            userBuffer,
            &seqNo,
            expirationTime);

        if ((fsdxStatus == FSDX_S_SUCCESS) ||
            (fsdxStatus == FSDX_S_HARD_READ))
        {
            trdStatus = pthread_mutex_unlock(&fsdxMutex);
            check(trdStatus,"4:fsdxMutex unlock bad status");

            recsRead++;
            totalRecsRead++;

              /* if (recsRead%10==0)
                 {
                 fprintf(stderr,".");
                 fflush(stderr);
                 fprintf(stderr,"trd%d",myNumber);
                 fflush(stderr);
                 }*/
            fprintf(stderr,"trd%d",myNumber);
            fflush(stderr);
            sleep(1);
        }
        else
        {
            FsdxStatusToString(fsdxStatus,errBuff,errBuffLen);

            trdStatus = pthread_mutex_unlock(&fsdxMutex);
            check(trdStatus,"4:fsdxMutex unlock bad status");

            printf("\n%s\n",errBuff);

            break;
        }

          /* Reenable Cancels */

        pthread_setcancel(CANCEL_ON);

        pthread_testcancel();

    }

    pthread_exit ((pthread_addr_t *)myNumber);
}



main()
{
    long      workerNum;   // Counter used to index workers
    int    exitValue;   // Individual workers return status
    int    trdStatus;   // Hold status from pthread calls

    PARAMS          *subParams;
    char            *pSessMarker;
    char            *userMap;
    int              lineCount;
    FSDX_U2          astQuota   = 100,
        queueDepth = 3;
    FSDX_U4          serviceDataStatus,
        msgLength=0,
        *msgCount,
        *byteCount;
    FSDX_ACCESSMODE   ReadMode = ACCESSMODE_SQNTL_CNTNS;
    int errBuffLen=128;
    char errBuff[128];
    time_t ts0, ts1;
    int elapsedSecs,
        recsPerSecs,
        recsPerMin,
        recsPerHr;



      // Call a routine that reads program driving params from a simple file
    if (!getParams(&subParams))
    {
        printf("Couldn't open params file for Insert Subscriber, Sorry !\n");
        return(0);
    }

      // Call a routine that will parse an FSDX map from an external file
    if (!processMap(&userMap,&msgLength,&lineCount))
    {
        printf("Failed to process map file properly\n");
        return(0);
    }

    if (strncmp(subParams->sessionMarker,"spaces",6)==0)
        memset(subParams->sessionMarker,' ',8);

    if (strncmp(subParams->sessionMarker,"NULL",4)==0)
        pSessMarker=NULL;
    else
        pSessMarker = subParams->sessionMarker;

    printf("calling open\n");
    fsdxStatus = FsdxSubOpenChannel (
        &channel,
        (FSDX_CSTR)subParams->subscriberName,
        (FSDX_CSTR)subParams->dataServiceName,
        ReadMode,
        &serviceDataStatus,
        pSessMarker,
        astQuota,
        queueDepth,
        NULL,
        FSDX_M_STREAM,
        NULL);

    if (fsdxStatus != FSDX_S_SUCCESS)
    {
        printf("Failed open %d", fsdxStatus);
        FsdxStatusToString(fsdxStatus,errBuff,errBuffLen);
        printf("\n%s\n",errBuff);
        return(0);
    }

    printf("opened dsv \n");

    fsdxStatus = FsdxSubRegisterMap(
        channel,
        (FSDX_CSTR) subParams->messageMapName,
        userMap,
        &msgLength);


    if (fsdxStatus != FSDX_S_SUCCESS)
    {
        printf("Failed regis %d", fsdxStatus);
        FsdxStatusToString(fsdxStatus,errBuff,errBuffLen);
        printf("\n%s\n",errBuff);
        for (fsdxStatus=0;fsdxStatus<lineCount;fsdxStatus++)
        {
            printf("%-41.41s",userMap);
            userMap+=41;
        }
        return(0);
    }

    printf("regis map file %d\n", fsdxStatus);

    time(&ts0);

      // Beginning of thread nonsense

    totalRecsRead=0;
      // Create Mutexes

    trdStatus = pthread_mutex_init (&fsdxMutex, pthread_mutexattr_default);
    check(trdStatus,"8:fsdxMutex_init bad status\n");

    trdStatus = pthread_mutex_init (&condMutex, pthread_mutexattr_default);
    check(trdStatus,"8:Mutex_init bad status\n");

      // Create Condition Variable "CV"

    trdStatus = pthread_cond_init (&condVar, pthread_condattr_default);
    check(trdStatus,"10:Cond_init bad status\n");

    pthread_attr_t attr;
    pthread_attr_create(&attr);
    pthread_attr_setstacksize(&attr ,1024000);


      // Create Worker Threads

    for (workerNum = 0; workerNum < WORKERS; workerNum++)
    {
        trdStatus = pthread_create(&threads[workerNum],
                                   pthread_attr_default,
                                     //                              attr,
                                   fsdxReads,
                                   (pthread_addr_t)workerNum);
          // Maxie:1  workerNum should be deref'ed.


        check(trdStatus,"11:Pthread_create bad status\n");
    }

      // Set the predicate thread_hold to 0, and broadcast on condition varibale
      // that worker threads may proceed

    trdStatus = pthread_mutex_lock (&condMutex);
    check(trdStatus,"12:Mutex_lock bad status\n");

    threadHold = 0;
    trdStatus = pthread_cond_broadcast (&condVar);

    trdStatus = pthread_mutex_unlock (&condMutex);
    check(trdStatus,"13:Mutex_unlock bad status\n");


      //  Join each worker inorder to obtain summation totals, and
      //  to ensure successful completion.
      //  Mark thread storage as free to be reclaimed upon termination
      //  by detaching it

    for (workerNum = 0; workerNum < WORKERS; workerNum++)
    {
        trdStatus = pthread_join (threads[workerNum], (pthread_addr_t *)&exitVal
        check(trdStatus,"14:pthread_join bad status\n");

        if (exitValue == workerNum)
            printf("\nThread %d terminated normally\n",workerNum);

          // Upon normal termination the exit_value = the workerNum

        trdStatus = pthread_detach (&threads[workerNum]);
        check(trdStatus,"15:pthread_detach bad status\n");
    }

      // End of thread nonsense


    time(&ts1);
    elapsedSecs=(time_t)(ts1-ts0);
    recsPerSecs=totalRecsRead/elapsedSecs;
    recsPerMin=recsPerSecs*60;
    recsPerHr=recsPerMin*60;

    printf("\nTotal recs read = %d\nTime to read was %d\nRecords inserted at rat
of %d per second",
           totalRecsRead,elapsedSecs,recsPerSecs);

    printf("\nRecords inserted at rate of %d per minute\nRecords inserted at rat
of %d per Hour",
           recsPerMin,recsPerHr);
    printf("\n");

    fsdxStatus = FsdxSubCloseChannelSync (
        channel,
        msgCount,
        byteCount );

}

/***************************End Of
Main*******************************************************/


/* This is the routine that parses the params file*/
int getParams(PARAMS **pParams)
{
    FILE            *paramsFile;

    *pParams=(PARAMS *)malloc(sizeof(PARAMS));

    if ((paramsFile = fopen("fsdxSub.params","r")) == NULL)
        return(0);

    fscanf(paramsFile, "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s",
           (*pParams)->publisherName,
           (*pParams)->subscriberName,
           (*pParams)->dataServiceName,
           (*pParams)->sessionMarker,
           (*pParams)->messageMapName,
           (*pParams)->sequenceNumber,
           (*pParams)->dbServer,
           (*pParams)->dbName,
           (*pParams)->dbUserId,
           (*pParams)->dbPasswd,
           (*pParams)->dbRcvStoredProc,
           (*pParams)->dbSndStoredProc,
           (*pParams)->param1,
           (*pParams)->param2,
           (*pParams)->tableName);

    fclose (paramsFile);

    return (1);
}


/* this is the routine that parses the map file */
int processMap(char    **userMap,
               FSDX_U4  *msgLength,
               int      *lineCount)
{

    FILE            *mapFile;
    int              mapStatus;
    char             map[10000];
    char             tmpMapBuffer[80];
    char            *inputStatus;
    MAPELEMENT      *pMap = (MAPELEMENT *)map;

    if ((mapFile = fopen("fsdxSub.map","r")) == NULL)
    {
        return(0);
    }

    printf("opened map file \n");

    *msgLength=0;
    *lineCount=0;
    *userMap=(char *)malloc(sizeof(char)*41);

    while (1)
    {
        memset(tmpMapBuffer, 32, 80);
        memset(pMap->type, 32, 4);
        memset(pMap->name, 32, 31);
        memset(pMap->length, 32, 4);
        memset(pMap->status, 32, 2);

        inputStatus = fgets (tmpMapBuffer, 80, mapFile);
        *userMap=(char *)realloc(*userMap, strlen(*userMap)+41);
        sprintf(*userMap+(*lineCount*41),"%-41.41s", tmpMapBuffer);

        if (inputStatus == '\0')
            break;

        mapStatus = sscanf(tmpMapBuffer,"%s %s %s %s",
                           pMap->type,
                           pMap->name,
                           pMap->length,
                           pMap->status);

        if(mapStatus > 0)

            pMap->type[strlen(pMap->type)] = ' ';

        if(mapStatus > 1)
            pMap->name[strlen(pMap->name)] = ' ';

        if(mapStatus > 2)
        {
            pMap->length[strlen(pMap->length)] = ' ';
            *msgLength+=atoi(pMap->length);
        }

        if(mapStatus > 3)
            pMap->status[strlen(pMap->status)] = ' ';

        *lineCount += 1;
        pMap += 1;
    }

    fclose(mapFile);

    printf("Sucessfully parsed map file\n");

    return(1);
}

--------------------------------

#ifndef FPCA_PUB_H
#define FPCA_PUB_H
/*******************************************************************
*
*  Facility    :  FSDX
*                 Financial Services Data Exchange Message
*
*  Module      :  FPCA Publisher Header file
*
*  Notes       :
*
*  Modification History :
*
*   #    date      by   reason
*   ---  --------  ---  ---------------------------------------------
*   000  10/17/96    mm   created
*
*******************************************************************/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
#include <pthread.h>

extern "C" {
#include <fsdx.h>           /* FSDX Header */
#include <fsdx_sts.h>       /* FSDX Return Codes */
}


#define WORKERS   50

/* Macros */

#define check(status,string) \
 if (status == -1)  \
  perror(string)

/* Global Data */
pthread_mutex_t fsdxMutex;   /* Mutex used to lock fsdxStatus */
pthread_mutex_t condMutex;   /* Mutex used to ensure CV integrity */
pthread_cond_t condVar;   /* Condition Variable for thread start */
int  threadHold = 1;                 /* Number assosciated with condition state
*/
pthread_t threads[WORKERS];  /* Array of worker threads */
int  totalRecsRead;



 typedef struct {
 char publisherName[FSDX_K_NAMELEN+1];
 char subscriberName[FSDX_K_NAMELEN+1];
   char dataServiceName[FSDX_K_NAMELEN+1];
 char sessionMarker[FSDX_K_SESSMARKLEN+1];
 char messageMapName[FSDX_K_NAMELEN+1];
 char sequenceNumber[FSDX_K_SESSMARKLEN+1];
 char dbServer[FSDX_K_NAMELEN+1];
 char dbName[FSDX_K_NAMELEN+1];
 char dbUserId[FSDX_K_NAMELEN+1];
 char dbPasswd[FSDX_K_NAMELEN+1];
 char dbRcvStoredProc[FSDX_K_NAMELEN+1];
 char dbSndStoredProc[FSDX_K_NAMELEN+1];
 char param1[FSDX_K_NAMELEN+1];
 char param2[FSDX_K_NAMELEN+1];
 char tableName[FSDX_K_NAMELEN+1];
 } PARAMS;

 typedef struct {
 char type[4];
 char name[31];
 char length[4];
 char status[2];
 } MAPELEMENT;

 typedef struct {
 char key[32];
 char fld0[234];
 char fld1[234];
 char fld2[234];
 char fld3[234];
 } BOB_DATA;

 /* struct for Msg List */
 typedef struct _MSG {
  char  *buff;
  int   mode;
  struct _MSG  *next;
 } MSG;

 /* Struct to hold CB info */
 typedef struct {
       char *userBuffer;
       int iteration;
       char *tableName;
       int  flag;
       int  commit;
       int  connNum;
       MSG *msgLst;
 } CBDATA;



 /* Forward declarations for error and message handlers and fcn calls */
 int getParams(PARAMS **);
 int processMap(char **, FSDX_U4 *,int *);
 void readNextCb(void*,
                 char*,
                 char*,
                 int*,
                 FSDX_SEQNO*,
                 char*,
                 CBDATA*,
                 int* );

 void addMsg(void **, void *);
#endif











T.RTitleUserPersonal
Name
DateLines
1551.1It is scary to think that this code is supporting a large financial institutionWTFN::SCALESDespair is appropriate and inevitable.Fri May 30 1997 22:0338
The threads list includes three "Thread 0"'s, but zero is not a legitimate
sequence number, so it would seem that something has corrupted portions of the
data structures which belong to the threads library.

We took a look at the source code provided.  We are scared.

Of the various "interesting" features we found in the code, the single most
disturbing is the fact that one of the routines called by the threads allocates
10K off the stack.  Since the threads are being created with the default guard
areas of only 2K, there's a real possibility that these threads could overflow
their stacks without anybody realizing it.

Threads should be created with a guard area at least as large as the largest
stack allocation.  On the other hand, since stack space in a thread is a scarce
and limited resource, a good rule of thumb is that any allocation larger than
512 bytes (or perhaps up to half a page) should be allocated from the heap
(i.e., via malloc()) and not from the stack.  (In addition to easing stack size
problems, following this rule of thumb also frees you from having to enlarge the
guard size.)

However, there is one other item, which could be the source of the corruption
(and therefore, possibly, the hang).  In the routine fsdxReads(), there is a
call to FsdxSubReadNextSync() which specifies "expirationTime" as one of the
parameters.  This appears to be an uninitialized pointer.  If this is an output
parameter, then this would result in a random memory corruption.  Since the
dirty part of the stack frequently contains addresses of other parts of the
stack or of data structures accessed in previous routine calls, writing to
uninitialized local pointer variables tends to corrupt other parts of the stack
or the afore mentioned data structures...

As to why it hangs when compiled by C++ and not by C, there could be lots of
reasons.  However, in light of the above, I'd suggest that it's because the code
compiled with the C compiler leaves different bit patterns on the stack, which
result in the corruption occuring at a (relatively) benign location instead of
nailing the threads data structures.


				Webb (and Peter)
1551.2Compilers work to obey stack guardsWIBBIN::NOYCEPulling weeds, pickin' stonesMon Jun 02 1997 15:0110
> Since the threads are being created with the default guard
> areas of only 2K, there's a real possibility that these threads could overflow
> their stacks without anybody realizing it.
> Threads should be created with a guard area at least as large as the largest
> stack allocation. 

No, this is not necessary.  The Digital UNIX calling standard specifies a protocol
for stack checking that guarantees that the guard size it specifies is adequate.
As far as I know, all the Digital UNIX compilers follow the protocol.  Have you
seen otherwise?  (PS- how do you get a 2K guard area on Alpha??)
1551.3DCETHD::BUTENHOFDave Butenhof, DECthreadsMon Jun 02 1997 16:0918
Unfortunately, I believe we found out that DEC C had NOT been generating
stack probes until relatively recently. Given that this is c++ "5.5 or 5.6",
my guess would that it's more than "recent enough". On the other hand, DEC C
and DEC C++ do not always maintain parity where I would expect parity to be
an obvious basic requirement. (For example, c++ still apparently does not
support long pointers on EVMS). So can we get confirmation of the exact
actual version of compiler they're using... and then from the DEC C++ group
that this version really does stack probes?

We recently ran into a problem where our code was broken by bad stack probing
during our context switch. We worked around the problem by changing the
compiler options for the affected module to prevent the compiler from
generating stack probes. I don't recall now exactly which option it was (I
think it was optimization level, but I'm not sure). In any case, a full
report on which compiler OPTIONS the affected program is using might also be
useful.

	/dave
1551.4Which version of "the present" are we all in? ;-)WTFN::SCALESDespair is appropriate and inevitable.Mon Jun 02 1997 17:178
.2> how do you get a 2K guard area on Alpha?

Obviously you can't; we round up to the next protection granularity unit. 
Nevertheless, that's not enough in the absence of stack probing, and I don't
remember us getting much of that when last we were on V3.2.


				Webb
1551.5Thanks. I will see what I can find out about the compiler options.CREME::LAMPERTPat Lampert, UNIX Applications Support, 343-1050Tue Jun 03 1997 23:198
Sorry. I let a whole day go by without checking bac
back on this note. Thanks for the suggestions.

One of the things I tried (not in the sources I sent you)
was setting up a really big stack. This didnt seem to 
matter. The program still failed in the same way.

Pat
1551.6One other thing....CREME::LAMPERTPat Lampert, UNIX Applications Support, 343-1050Tue Jun 03 1997 23:25126
Before entering note -.1 I did try using CMA_METER to
get more information on which threads owns the mutexes and....

From my CHAMP w/u:
----------------------------------------------------------

Now that the problem with the sources are fixed. I dialed into the 
customer's system again. Unfortunately setting up CMA_METER is causing 
the program to fail in a different way...

NYCSEX0000.btco.com> export CMA_METER
NYCSEX0000.btco.com> ladebug fsdxSubThreads
Welcome to the Ladebug Debugger Version 4.0-37
------------------
object file name: fsdxSubThreads
Reading symbolic information ...done
(ladebug) run
opened map file
Sucessfully parsed map file
calling open
opened dsv
regis map file 1
0
1
2
Thread received signal SEGV
stopped at [_doprnt 0x3ff8102d7a8]
(ladebug) where
>0  0x3ff8102d7a8 in _doprnt(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 
0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xa
aaaaaaaaaaaaaaa) DebugInformationStrippedFromFile38
#1  0x3ff81056d14 in sprintf(0x3ffc24a6998, 0x3ffc1c9b7d8, 0x3ffc1c9b7b0, 
0x3ffc24a69a8, 0x3ffc24a6c58, 0x8) DebugInformationStrippe
dFromFile150
#2  0x3ff82030f34 in cma__error_inq_text(0x177db037, 0x3ffc24a6b4b, 
0x3ffc24a6c58, 0x104c18, 0x0, 0x6) DebugInformationStrippedFromF
ile91
#3  0x3ff82030390 in exc_get_message(0x3ffc24a6d50, 0x0, 0x0, 0x3e, 0x44, 
0x0) DebugInformationStrippedFromFile87
#4  0x3ff8202fecc in exc_report(0x0, 0x3e, 0x44, 0x0, 0x3ff8202ffd0, 
0x11ffffd58) DebugInformationStrippedFromFile87
#5  0x3ff8202ffcc in exc_raise(0x3ffc24a6d50, 0x0, 0x78018, 0x0, 0x0, 
0x104c18) DebugInformationStrippedFromFile87
#6  0x3ff82030198 in exc_raise_status(0x45586732, 0x2, 0x0, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile87
#7  0x3ff8202fe54 in cma__error(0x0, 0x0, 0x0, 0x0, 0x3ff82049380, 
0xaaaaaaaa00000073) DebugInformationStrippedFromFile86
#8  0x3ff8204937c in UnknownProcedure9FromFile108(0x3ffc0d18650, 0x0, 
0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaa
aaaaaa) DebugInformationStrippedFromFile108
#9  0x3ff81029228 in __cma_tis_mutex_unlock(0x3ff8102937c, 
0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff810277f0, 0xa
aaaaaaa0000000a) DebugInformationStrippedFromFile25
#10 0x3ff810277ec in __rec_mutex_unlock(0x3ffc0d18640, 0xaaaaaaaaaaaaaaaa, 
0x3ff8102a024, 0xaaaaaaaaaaaaaaaa, 0x3ff82030f74, 0xaaaaa
aaaaaaaaaaa) DebugInformationStrippedFromFile2
#11 0x3ff81045f14 in getenv(0x3ff8102a064, 0x0, 0x3ff81019828, 
0x3ffc24a6f5a, 0x3ff81029fe4, 0xaaaa0042aaaaaaaa) DebugInformationStr
ippedFromFile77
#12 0x3ff8102a060 in __catopen(0x3ffc24a6f50, 0x3ffc1c9b7c0, 0x3ffc24a6fd8, 
0x3ffc1c94cf0, 0x3ffc1c9b7d8, 0x2) DebugInformationStrip
pedFromFile28
#13 0x3ff82030f8c in cma__error_inq_text(0x177db037, 0x3ffc24a718b, 
0x3ffc24a7298, 0x104c18, 0x0, 0x6) DebugInformationStrippedFromF
ile91
#14 0x3ff82030390 in exc_get_message(0x3ffc24a7390, 0x0, 0x0, 0x3e, 0x44, 
0x0) DebugInformationStrippedFromFile87
#15 0x3ff8202fecc in exc_report(0x0, 0x3e, 0x44, 0x0, 0x3ff8202ffd0, 
0x11ffffd58) DebugInformationStrippedFromFile87
#16 0x3ff8202ffcc in exc_raise(0x3ffc24a7390, 0x0, 0x78018, 0x0, 0x0, 
0x104c18) DebugInformationStrippedFromFile87
#17 0x3ff82030198 in exc_raise_status(0x45586732, 0x2, 0x0, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile87
#18 0x3ff8202fe54 in cma__error(0x0, 0x0, 0x0, 0x0, 0x3ff82049380, 
0xaaaaaaaa00000073) DebugInformationStrippedFromFile86
#19 0x3ff8204937c in UnknownProcedure9FromFile108(0x3ffc0d18650, 0x0, 
0x3ff8102937c, 
0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaa
aaaaaa) DebugInformationStrippedFromFile108
#20 0x3ff81029228 in __cma_tis_mutex_unlock(0x3ff8102937c, 
0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff810277f0, 0xa
aaaaaaa0000000a) DebugInformationStrippedFromFile25
#21 0x3ff810277ec in __rec_mutex_unlock(0x3ffc0d18640, 0xaaaaaaaaaaaaaaaa, 
0x3ff8102a024, 0xaaaaaaaaaaaaaaaa, 0x3ff82030f74, 0xaaaaa
aaaaaaaaaaa) DebugInformationStrippedFromFile2
#22 0x3ff81045f14 in getenv(0x3ff8102a064, 0x0, 0x3ff81019828, 
0x3ffc24a759a, 0x3ff81029fe4, 0xaaaa0042aaaaaaaa) DebugInformationStr
ippedFromFile77
#23 0x3ff8102a060 in __catopen(0x3ffc24a7590, 0x3ffc1c9b7c0, 0x3ffc24a7618, 
0x3ffc1c94cf0, 0x3ffc1c9b7d8, 0x2) DebugInformationStrip
pedFromFile28
#24 0x3ff82030f8c in cma__error_inq_text(0x177db037, 0x3ffc24a77cb, 
0x3ffc24a78d8, 0x104c18, 0x0, 0x6) DebugInformationStrippedFromF
ile91
#25 0x3ff82030390 in exc_get_message(0x3ffc24a79d0, 0x0, 0x0, 0x3e, 0x44, 
0x0) DebugInformationStrippedFromFile87
#26 0x3ff8202fecc in exc_report(0x0, 0x3e, 0x44, 0x0, 0x3ff8202ffd0, 
0x11ffffd58) DebugInformationStrippedFromFile87
#27 0x3ff8202ffcc in exc_raise(0x3ffc24a79d0, 0x0, 0x78018, 0x0, 0x0, 
0x104c18) DebugInformationStrippedFromFile87
#28 0x3ff82030198 in exc_raise_status(0x45586732, 0x2, 0x0, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile87
#29 0x3ff8202fe54 in cma__error(0x0, 0x0, 0x0, 0x0, 0x3ff82049380, 
0xaaaaaaaa00000073) DebugInformationStrippedFromFile86
#30 0x3ff8204937c in UnknownProcedure9FromFile108(0x3ffc0d18650, 0x0, 
0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaa
aaaaaa) DebugInformationStrippedFromFile108
#31 0x3ff81029228 in __cma_tis_mutex_unlock(0x3ff8102937c, 
0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff810277f0, 0xa
aaaaaaa0000000a) DebugInformationStrippedFromFile25
#32 0x3ff810277ec in __rec_mutex_unlock(0x3ffc0d18640, 0xaaaaaaaaaaaaaaaa, 
0x3ff8102a024, 0xaaaaaaaaaaaaaaaa, 0x3ff82030f74, 0xaaaaa
aaaaaaaaaaa) DebugInformationStrippedFromFile2
#33 0x3ff81045f14 in getenv(0x3ff8102a064, 0x0, 0x3ff81019828, 
0x3ffc24a7bda, 0x3ff81029fe4, 0xaaaa0042aaaaaaaa) DebugInformationStr

.
.


Forever and ever.   I finally just control c'd the thing.

How do I tell which thread creates which mutex without cma_meter?
Unless there are other suggestions from engineering I will forward 
my original trace to the developer who knows the software and ask
him if he can narrow this down.

Pat

1551.7Same corruption, different place, I presume.WTFN::SCALESDespair is appropriate and inevitable.Wed Jun 04 1997 02:4523
.5> One of the things I tried (not in the sources I sent you) was setting up a 
.5> really big stack. This didnt seem to matter. 

Well, it's probably not a stack overflow problem then.  (That wasn't the likely
explanation.)  If it's the unitialized pointer issue that Peter and I raised,
then it's quite possible that changing the size of the stack would have no
effect.

.6> Unfortunately setting up CMA_METER is causing the program to fail in a 
.6> different way...

This is not particularly surprising.  Turning on metering forces the code down
different paths, changing the execution timing, data allocation patterns, and
dirtying of the stack.

.6> Forever and ever.   I finally just control c'd the thing.

What we would want to see would be the frames just below where the pattern stops
repeating...  It looks like maybe something has corrupted one of the libc
mutexes resulting in the error on each call to cma_tis_mutex_unlock().


				Webb
1551.8Same result even with expirationTime initialized.CREME::LAMPERTPat Lampert, UNIX Applications Support, 343-1050Thu Jun 05 1997 00:26346
Note customer is using c++ 5.6. UNIX 3.2d-2. Sorry, I dont have information
on how libfsdx.so was built yet.

Taking the advice from an earlier note I dialed back into
the customer's system and from a less stripped down 
version of the program I was able to determine that
expirationTime was supposed to be...

char            *expirationTime=  (char *) malloc(sizeof(char) * 8);


I fixed the test program and re-ran. Unfortunately it still hangs in 
the same manner. After lowering the size of the stack I found I
had more manageable results from ladebug. Here is what I found....


Sorry its a script log so its a bit messy...

I defined expirationTime...
.
.
main()
.
.



 char		 *expirationTime=  (char *) malloc(sizeof(char) * 8);

.
.

Recompiled...
.
.
recompiling 
cxx -g -o fsdxSubThreads fsdxSubThreads.cxx -I. -I/usr/include/cxx 
-I/usr/users/marzomi/hpFsdx/fsdx/include/ 
-L/usr/users/marzomi/hpFsdx/fsdx/lib/ -lfsdx 
-L/usr/lib -ldnet_stub -lc_r -threads 

NYCSEX0000.btco.com> fsdxSubThreads
ksh: fsdxSubThreads:  not found
NYCSEX0000.btco.com> ./fsdxSubThreads
opened map file 
Sucessfully parsed map file
calling open
opened dsv 
regis map file 1
0
1
2
trd0trd1
It hangs so I control-c...

NYCSEX0000.btco.com>                 
NYCSEX0000.btco.com> 
NYCSEX0000.btco.com> 
NYCSEX0000.btco.com> CMA_METER="1"
NYCSEX0000.btco.com> export CMA_METER  
NYCSEX0000.btco.com> ladebug fsdxSubThreads
Welcome to the Ladebug Debugger Version 4.0-37
------------------ 
object file name: fsdxSubThreads 
Reading symbolic information ...done
(ladebug) run
opened map file 
Sucessfully parsed map file
calling open
opened dsv 
regis map file 1
0
1
2
Thread received signal SEGV
stopped at [_doprnt 0x3ff8102d7a8]	
(ladebug) where
>0  0x3ff8102d7a8 in _doprnt(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile38
#1  0x3ff81056d14 in sprintf(0x3ffc1cd2800, 0x3ffc1c943a0, 0x0, 0x104418, 0x0, 0x6) DebugInformationStrippedFromFile150
#2  0x3ff820302a8 in exc_get_message(0x3ffc1cd2a10, 0x0, 0x0, 0x3e, 0x44, 0x0) DebugInformationStrippedFromFile87
#3  0x3ff8202fecc in exc_report(0x0, 0x3e, 0x44, 0x0, 0x3ff8202ffd0, 0x11ffffd58) DebugInformationStrippedFromFile87
#4  0x3ff8202ffcc in exc_raise(0x3ffc1cd2a10, 0x0, 0x78018, 0x0, 0x0, 0x104418) DebugInformationStrippedFromFile87
#5  0x3ff82030198 in exc_raise_status(0x45586732, 0x2, 0x0, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile87
#6  0x3ff8202fe54 in cma__error(0x0, 0x0, 0x0, 0x0, 0x3ff82049380, 0xaaaaaaaa00000073) DebugInformationStrippedFromFile86
#7  0x3ff8204937c in UnknownProcedure9FromFile108(0x3ffc0d18650, 0x0, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile108
#8  0x3ff81029228 in __cma_tis_mutex_unlock(0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff810277f0, 0xaaaaaaaa0000000a) DebugInformationStrippedFromFile25
#9  0x3ff810277ec in __rec_mutex_unlock(0x3ffc0d18640, 0xaaaaaaaaaaaaaaaa, 0x3ff8102a024, 0xaaaaaaaaaaaaaaaa, 0x3ff82030f74, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile2
#10 0x3ff81045f14 in getenv(0x3ff8102a064, 0x0, 0x3ff81019828, 0x3ffc1cd2c1a, 0x3ff81029fe4, 0xaaaa0042aaaaaaaa) DebugInformationStrippedFromFile77
#11 0x3ff8102a060 in __catopen(0x3ffc1cd2c10, 0x3ffc1c9b7c0, 0x3ffc1cd2c98, 0x3ffc1c94cf0, 0x3ffc1c9b7d8, 0x2) DebugInformationStrippedFromFile28
#12 0x3ff82030f8c in cma__error_inq_text(0x177db037, 0x3ffc1cd2e4b, 0x3ffc1cd2f58, 0x104418, 0x0, 0x6) DebugInformationStrippedFromFile91
#13 0x3ff82030390 in exc_get_message(0x3ffc1cd3050, 0x0, 0x0, 0x3e, 0x44, 0x0) DebugInformationStrippedFromFile87
#14 0x3ff8202fecc in exc_report(0x0, 0x3e, 0x44, 0x0, 0x3ff8202ffd0, 0x11ffffd58) DebugInformationStrippedFromFile87
#15 0x3ff8202ffcc in exc_raise(0x3ffc1cd3050, 0x0, 0x78018, 0x0, 0x0, 0x104418) DebugInformationStrippedFromFile87
#16 0x3ff82030198 in exc_raise_status(0x45586732, 0x2, 0x0, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile87
#17 0x3ff8202fe54 in cma__error(0x0, 0x0, 0x0, 0x0, 0x3ff82049380, 0xaaaaaaaa00000073) DebugInformationStrippedFromFile86
#18 0x3ff8204937c in UnknownProcedure9FromFile108(0x3ffc0d18650, 0x0, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile108
#19 0x3ff81029228 in __cma_tis_mutex_unlock(0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff810277f0, 0xaaaaaaaa0000000a) DebugInformationStrippedFromFile25
#20 0x3ff810277ec in __rec_mutex_unlock(0x3ffc0d18640, 0xaaaaaaaaaaaaaaaa, 0x3ff8102a024, 0xaaaaaaaaaaaaaaaa, 0x3ff82030f74, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile2
#21 0x3ff81045f14 in getenv(0x3ff8102a064, 0x0, 0x3ff81019828, 0x3ffc1cd325a, 0x3ff81029fe4, 0xaaaa0042aaaaaaaa) DebugInformationStrippedFromFile77
#22 0x3ff8102a060 in __catopen(0x3ffc1cd3250, 0x3ffc1c9b7c0, 0x3ffc1cd32d8, 0x3ffc1c94cf0, 0x3ffc1c9b7d8, 0x2) DebugInformationStrippedFromFile28
#23 0x3ff82030f8c in cma__error_inq_text(0x177db037, 0x3ffc1cd348b, 0x3ffc1cd3598, 0x104418, 0x0, 0x6) DebugInformationStrippedFromFile91
#24 0x3ff82030390 in exc_get_message(0x3ffc1cd3690, 0x0, 0x0, 0x3e, 0x44, 0x0) DebugInformationStrippedFromFile87
#25 0x3ff8202fecc in exc_report(0x0, 0x3e, 0x44, 0x0, 0x3ff8202ffd0, 0x11ffffd58) DebugInformationStrippedFromFile87
#26 0x3ff8202ffcc in exc_raise(0x3ffc1cd3690, 0x0, 0x78018, 0x0, 0x0, 0x104418) DebugInformationStrippedFromFile87
#27 0x3ff82030198 in exc_raise_status(0x45586732, 0x2, 0x0, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile87
#28 0x3ff8202fe54 in cma__error(0x0, 0x0, 0x0, 0x0, 0x3ff82049380, 0xaaaaaaaa00000073) DebugInformationStrippedFromFile86
#29 0x3ff8204937c in UnknownProcedure9FromFile108(0x3ffc0d18650, 0x0, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile108
#30 0x3ff81029228 in __cma_tis_mutex_unlock(0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff810277f0, 0xaaaaaaaa0000000a) DebugInformationStrippedFromFile25
#31 0x3ff810277ec in __rec_mutex_unlock(0x3ffc0d18640, 0xaaaaaaaaaaaaaaaa, 0x3ff8102a024, 0xaaaaaaaaaaaaaaaa, 0x3ff82030f74, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile2
#32 0x3ff81045f14 in getenv(0x3ff8102a064, 0x0, 0x3ff81019828, 0x3ffc1cd389a, 0x3ff81029fe4, 0xaaaa0042aaaaaaaa) DebugInformationStrippedFromFile77
#33 0x3ff8102a060 in __catopen(0x3ffc1cd3890, 0x3ffc1c9b7c0, 0x3ffc1cd3918, 0x3ffc1c94cf0, 0x3ffc1c9b7d8, 0x2) DebugInformationStrippedFromFile28
#34 0x3ff82030f8c in cma__error_inq_text(0x177db037, 0x3ffc1cd3acb, 0x3ffc1cd3bd8, 0x104418, 0x0, 0x6) DebugInformationStrippedFromFile91
#35 0x3ff82030390 in exc_get_message(0x3ffc1cd3cd0, 0x0, 0x0, 0x3e, 0x44, 0x0) DebugInformationStrippedFromFile87
#36 0x3ff8202fecc in exc_report(0x0, 0x3e, 0x44, 0x0, 0x3ff8202ffd0, 0x11ffffd58) DebugInformationStrippedFromFile87
#37 0x3ff8202ffcc in exc_raise(0x3ffc1cd3cd0, 0x0, 0x78018, 0x0, 0x0, 0x104418) DebugInformationStrippedFromFile87
#38 0x3ff82030198 in exc_raise_status(0x45586732, 0x2, 0x0, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile87
#39 0x3ff8202fe54 in cma__error(0x0, 0x0, 0x0, 0x0, 0x3ff82049380, 0xaaaaaaaa00000073) DebugInformationStrippedFromFile86
#40 0x3ff8204937c in UnknownProcedure9FromFile108(0x3ffc0d18650, 0x0, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile108
#41 0x3ff81029228 in __cma_tis_mutex_unlock(0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff810277f0, 0xaaaaaaaa0000000a) DebugInformationStrippedFromFile25
#42 0x3ff810277ec in __rec_mutex_unlock(0x3ffc0d18640, 0xaaaaaaaaaaaaaaaa, 0x3ff8102a024, 0xaaaaaaaaaaaaaaaa, 0x3ff82030f74, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile2
#43 0x3ff81045f14 in getenv(0x3ff8102a064, 0x0, 0x3ff81019828, 0x3ffc1cd3eda, 0x3ff81029fe4, 0xaaaa0042aaaaaaaa) DebugInformationStrippedFromFile77
#44 0x3ff8102a060 in __catopen(0x3ffc1cd3ed0, 0x3ffc1c9b7c0, 0x3ffc1cd3f58, 0x3ffc1c94cf0, 0x3ffc1c9b7d8, 0x2) DebugInformationStrippedFromFile28
#45 0x3ff82030f8c in cma__error_inq_text(0x177db037, 0x3ffc1cd410b, 0x3ffc1cd4218, 0x104418, 0x0, 0x6) DebugInformationStrippedFromFile91
#46 0x3ff82030390 in exc_get_message(0x3ffc1cd4310, 0x0, 0x0, 0x3e, 0x44, 0x0) DebugInformationStrippedFromFile87
#47 0x3ff8202fecc in exc_report(0x0, 0x3e, 0x44, 0x0, 0x3ff8202ffd0, 0x11ffffd58) DebugInformationStrippedFromFile87
#48 0x3ff8202ffcc in exc_raise(0x3ffc1cd4310, 0x0, 0x78018, 0x0, 0x0, 0x104418) DebugInformationStrippedFromFile87
#49 0x3ff82030198 in exc_raise_status(0x45586732, 0x2, 0x0, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile87
#50 0x3ff8202fe54 in cma__error(0x0, 0x0, 0x0, 0x0, 0x3ff82049380, 0xaaaaaaaa00000073) DebugInformationStrippedFromFile86
#51 0x3ff8204937c in UnknownProcedure9FromFile108(0x3ffc0d18650, 0x0, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile108
#52 0x3ff81029228 in __cma_tis_mutex_unlock(0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff810277f0, 0xaaaaaaaa0000000a) DebugInformationStrippedFromFile25
#53 0x3ff810277ec in __rec_mutex_unlock(0x3ffc0d18640, 0xaaaaaaaaaaaaaaaa, 0x3ff8102a024, 0xaaaaaaaaaaaaaaaa, 0x3ff82030f74, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile2
#54 0x3ff81045f14 in getenv(0x3ff8102a064, 0x0, 0x3ff81019828, 0x3ffc1cd451a, 0x3ff81029fe4, 0xaaaa0042aaaaaaaa) DebugInformationStrippedFromFile77
#55 0x3ff8102a060 in __catopen(0x3ffc1cd4510, 0x3ffc1c9b7c0, 0x3ffc1cd4598, 0x3ffc1c94cf0, 0x3ffc1c9b7d8, 0x2) DebugInformationStrippedFromFile28
#56 0x3ff82030f8c in cma__error_inq_text(0x177db037, 0x3ffc1cd474b, 0x3ffc1cd4858, 0x104418, 0x0, 0x6) DebugInformationStrippedFromFile91
#57 0x3ff82030390 in exc_get_message(0x3ffc1cd4950, 0x0, 0x0, 0x3e, 0x44, 0x0) DebugInformationStrippedFromFile87
#58 0x3ff8202fecc in exc_report(0x0, 0x3e, 0x44, 0x0, 0x3ff8202ffd0, 0x11ffffd58) DebugInformationStrippedFromFile87
#59 0x3ff8202ffcc in exc_raise(0x3ffc1cd4950, 0x0, 0x78018, 0x0, 0x0, 0x104418) DebugInformationStrippedFromFile87
#60 0x3ff82030198 in exc_raise_status(0x45586732, 0x2, 0x0, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile87
#61 0x3ff8202fe54 in cma__error(0x0, 0x0, 0x0, 0x0, 0x3ff82049380, 0x73) DebugInformationStrippedFromFile86
#62 0x3ff8204937c in UnknownProcedure9FromFile108(0x3ffc0d18650, 0x0, 0x3ff8102937c, 0xa9808, 0x3ff8102937c, 0x0) DebugInformationStrippedFromFile108
#63 0x3ff81029228 in __cma_tis_mutex_unlock(0x3ff8102937c, 0xa9808, 0x3ff8102937c, 0x0, 0x3ff810277f0, 0xa) DebugInformationStrippedFromFile25
#64 0x3ff810277ec in __rec_mutex_unlock(0x3ffc0d18640, 0x104418, 0x3ff8102a024, 0x0, 0x3ff82030f74, 0x3a9e000000000) DebugInformationStrippedFromFile2
#65 0x3ff81045f14 in getenv(0x3ff8102a064, 0x0, 0x3ff81019828, 0x3ffc1cd4b5a, 0x3ff81029fe4, 0x4200000000) DebugInformationStrippedFromFile77
#66 0x3ff8102a060 in __catopen(0x3ffc1cd4b50, 0x3ffc1c9b7c0, 0x3ffc1cd4bd8, 0x3ffc1c94cf0, 0x3ffc1c9b7d8, 0x2) DebugInformationStrippedFromFile28
#67 0x3ff82030f8c in cma__error_inq_text(0x177db037, 0x3ffc1cd4d8b, 0x3ffc1cd4e98, 0x104418, 0x0, 0x6) DebugInformationStrippedFromFile91
#68 0x3ff82030390 in exc_get_message(0x3ffc1cd4f90, 0x0, 0x0, 0x3e, 0x44, 0x0) DebugInformationStrippedFromFile87
#69 0x3ff8202fecc in exc_report(0x0, 0x3e, 0x44, 0x0, 0x3ff8202ffd0, 0x11ffffd58) DebugInformationStrippedFromFile87
#70 0x3ff8202ffcc in exc_raise(0x3ffc1cd4f90, 0x0, 0x78018, 0x0, 0x0, 0x104418) DebugInformationStrippedFromFile87
#71 0x3ff82030198 in exc_raise_status(0x45586732, 0x2, 0x0, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile87
#72 0x3ff8202fe54 in cma__error(0x0, 0x0, 0x0, 0x0, 0x3ff82049380, 0x73) DebugInformationStrippedFromFile86
#73 0x3ff8204937c in UnknownProcedure9FromFile108(0x3ffc0d18650, 0x0, 0x3ff8102937c, 0x0, 0x3ff8102937c, 0x0) DebugInformationStrippedFromFile108
#74 0x3ff81029228 in __cma_tis_mutex_unlock(0x3ff8102937c, 0x0, 0x3ff8102937c, 0x0, 0x3ff810277f0, 0xa) DebugInformationStrippedFromFile25
#75 0x3ff810277ec in __rec_mutex_unlock(0x3ffc0d18640, 0x0, 0x3ff8102a024, 0x0, 0x3ff82030f74, 0x0) DebugInformationStrippedFromFile2
#76 0x3ff81045f14 in getenv(0x3ff8102a064, 0x0, 0x3ff81019828, 0x3ffc1cd519a, 0x3ff81029fe4, 0x4200000000) DebugInformationStrippedFromFile77
#77 0x3ff8102a060 in __catopen(0x3ffc1cd5190, 0x3ffc1c9b7c0, 0x3ffc1cd5218, 0x3ffc1c94cf0, 0x3ffc1c9b7d8, 0x2) DebugInformationStrippedFromFile28
#78 0x3ff82030f8c in cma__error_inq_text(0x177db037, 0x3ffc1cd53cb, 0x3ffc1cd54d8, 0x104418, 0x0, 0x6) DebugInformationStrippedFromFile91
#79 0x3ff82030390 in exc_get_message(0x3ffc1cd55d0, 0x0, 0x0, 0x3e, 0x44, 0x0) DebugInformationStrippedFromFile87
#80 0x3ff8202fecc in exc_report(0x0, 0x3e, 0x44, 0x0, 0x3ff8202ffd0, 0x11ffffd58) DebugInformationStrippedFromFile87
#81 0x3ff8202ffcc in exc_raise(0x3ffc1cd55d0, 0x0, 0x78018, 0x0, 0x0, 0x104418) DebugInformationStrippedFromFile87
#82 0x3ff82030198 in exc_raise_status(0x45586732, 0x2, 0x0, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile87
#83 0x3ff8202fe54 in cma__error(0x0, 0x0, 0x0, 0x0, 0x3ff82049380, 0x2020202000000073) DebugInformationStrippedFromFile86
#84 0x3ff8204937c in UnknownProcedure9FromFile108(0x3ffc0d18650, 0x0, 0x3ff8102937c, 0x2020202020202020, 0x3ff8102937c, 0x2020202020202020) DebugInformationStrippedFromFile108
#85 0x3ff81029228 in __cma_tis_mutex_unlock(0x3ff8102937c, 0x2020202020202020, 0x3ff8102937c, 0x2020202020202020, 0x3ff810277f0, 0x202020200000000a) DebugInformationStrippedFromFile25
#86 0x3ff810277ec in __rec_mutex_unlock(0x3ffc0d18640, 0x2020202020202020, 0x3ff8102a024, 0x2020202020202020, 0x3ff82030f74, 0x2020202020202020) DebugInformationStrippedFromFile2
#87 0x3ff81045f14 in getenv(0x3ff8102a064, 0x0, 0x3ff81019828, 0x3ffc1cd57da, 0x3ff81029fe4, 0x2020004220202020) DebugInformationStrippedFromFile77
#88 0x3ff8102a060 in __catopen(0x3ffc1cd57d0, 0x3ffc1c9b7c0, 0x3ffc1cd5858, 0x3ffc1c94cf0, 0x3ffc1c9b7d8, 0x2) DebugInformationStrippedFromFile28
#89 0x3ff82030f8c in cma__error_inq_text(0x177db037, 0x3ffc1cd5a0b, 0x3ffc1cd5b18, 0x104418, 0x0, 0x6) DebugInformationStrippedFromFile91
#90 0x3ff82030390 in exc_get_message(0x3ffc1cd5c10, 0x0, 0x0, 0x3e, 0x44, 0x0) DebugInformationStrippedFromFile87
#91 0x3ff8202fecc in exc_report(0x0, 0x3e, 0x44, 0x0, 0x3ff8202ffd0, 0x11ffffd58) DebugInformationStrippedFromFile87
#92 0x3ff8202ffcc in exc_raise(0x3ffc1cd5c10, 0x0, 0x78018, 0x0, 0x0, 0x104418) DebugInformationStrippedFromFile87
#93 0x3ff82030198 in exc_raise_status(0x45586732, 0x2, 0x0, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile87
#94 0x3ff8202fe54 in cma__error(0x0, 0x0, 0x0, 0x0, 0x3ff82049380, 0xaaaaaaaa00000073) DebugInformationStrippedFromFile86
#95 0x3ff8204937c in UnknownProcedure9FromFile108(0x3ffc0d18650, 0x0, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile108
#96 0x3ff81029228 in __cma_tis_mutex_unlock(0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff810277f0, 0xaaaaaaaa0000000a) DebugInformationStrippedFromFile25
#97 0x3ff810277ec in __rec_mutex_unlock(0x3ffc0d18640, 0xaaaaaaaaaaaaaaaa, 0x3ff8102a024, 0xaaaaaaaaaaaaaaaa, 0x3ff82030f74, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile2
#98 0x3ff81045f14 in getenv(0x3ff8102a064, 0x0, 0x3ff81019828, 0x3ffc1cd5e1a, 0x3ff81029fe4, 0xaaaa0042aaaaaaaa) DebugInformationStrippedFromFile77
#99 0x3ff8102a060 in __catopen(0x3ffc1cd5e10, 0x3ffc1c9b7c0, 0x3ffc1cd5e98, 0x3ffc1c94cf0, 0x3ffc1c9b7d8, 0x2) DebugInformationStrippedFromFile28
#100 0x3ff82030f8c in cma__error_inq_text(0x177db037, 0x3ffc1cd604b, 0x3ffc1cd6158, 0x104418, 0x0, 0x6) DebugInformationStrippedFromFile91
#101 0x3ff82030390 in exc_get_message(0x3ffc1cd6250, 0x0, 0x0, 0x3e, 0x44, 0x0) DebugInformationStrippedFromFile87
#102 0x3ff8202fecc in exc_report(0x0, 0x3e, 0x44, 0x0, 0x3ff8202ffd0, 0x11ffffd58) DebugInformationStrippedFromFile87
#103 0x3ff8202ffcc in exc_raise(0x3ffc1cd6250, 0x0, 0x78018, 0x0, 0x0, 0x104418) DebugInformationStrippedFromFile87
#104 0x3ff82030198 in exc_raise_status(0x45586732, 0x2, 0x0, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile87
#105 0x3ff8202fe54 in cma__error(0x0, 0x0, 0x0, 0x0, 0x3ff82049380, 0xaaaaaaaa00000073) DebugInformationStrippedFromFile86
#106 0x3ff8204937c in UnknownProcedure9FromFile108(0x3ffc0d18650, 0x0, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile108
#107 0x3ff81029228 in __cma_tis_mutex_unlock(0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff810277f0, 0xaaaaaaaa0000000a) DebugInformationStrippedFromFile25
#108 0x3ff810277ec in __rec_mutex_unlock(0x3ffc0d18640, 0xaaaaaaaaaaaaaaaa, 0x3ff8102a024, 0xaaaaaaaaaaaaaaaa, 0x3ff82030f74, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile2
#109 0x3ff81045f14 in getenv(0x3ff8102a064, 0x0, 0x3ff81019828, 0x3ffc1cd645a, 0x3ff81029fe4, 0xaaaa0042aaaaaaaa) DebugInformationStrippedFromFile77
#110 0x3ff8102a060 in __catopen(0x3ffc1cd6450, 0x3ffc1c9b7c0, 0x3ffc1cd64d8, 0x3ffc1c94cf0, 0x3ffc1c9b7d8, 0x2) DebugInformationStrippedFromFile28
#111 0x3ff82030f8c in cma__error_inq_text(0x177db037, 0x3ffc1cd668b, 0x3ffc1cd6798, 0x104418, 0x0, 0x6) DebugInformationStrippedFromFile91
#112 0x3ff82030390 in exc_get_message(0x3ffc1cd6890, 0x0, 0x0, 0x3e, 0x44, 0x0) DebugInformationStrippedFromFile87
#113 0x3ff8202fecc in exc_report(0x0, 0x3e, 0x44, 0x0, 0x3ff8202ffd0, 0x11ffffd58) DebugInformationStrippedFromFile87
#114 0x3ff8202ffcc in exc_raise(0x3ffc1cd6890, 0x0, 0x78018, 0x0, 0x0, 0x104418) DebugInformationStrippedFromFile87
#115 0x3ff82030198 in exc_raise_status(0x45586732, 0x2, 0x0, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile87
#116 0x3ff8202fe54 in cma__error(0x0, 0x0, 0x0, 0x0, 0x3ff82049380, 0xaaaaaaaa00000073) DebugInformationStrippedFromFile86
#117 0x3ff8204937c in UnknownProcedure9FromFile108(0x3ffc0d18650, 0x0, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile108
#118 0x3ff81029228 in __cma_tis_mutex_unlock(0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff810277f0, 0xaaaaaaaa0000000a) DebugInformationStrippedFromFile25
#119 0x3ff810277ec in __rec_mutex_unlock(0x3ffc0d18640, 0xaaaaaaaaaaaaaaaa, 0x3ff8102a024, 0xaaaaaaaaaaaaaaaa, 0x3ff82030f74, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile2
#120 0x3ff81045f14 in getenv(0x3ff8102a064, 0x0, 0x3ff81019828, 0x3ffc1cd6a9a, 0x3ff81029fe4, 0xaaaa0042aaaaaaaa) DebugInformationStrippedFromFile77
#121 0x3ff8102a060 in __catopen(0x3ffc1cd6a90, 0x3ffc1c9b7c0, 0x3ffc1cd6b18, 0x3ffc1c94cf0, 0x3ffc1c9b7d8, 0x2) DebugInformationStrippedFromFile28
#122 0x3ff82030f8c in cma__error_inq_text(0x177db037, 0x3ffc1cd6ccb, 0x3ffc1cd6dd8, 0x104418, 0x0, 0x6) DebugInformationStrippedFromFile91
#123 0x3ff82030390 in exc_get_message(0x3ffc1cd6ed0, 0x0, 0x0, 0x3e, 0x44, 0x0) DebugInformationStrippedFromFile87
#124 0x3ff8202fecc in exc_report(0x0, 0x3e, 0x44, 0x0, 0x3ff8202ffd0, 0x11ffffd58) DebugInformationStrippedFromFile87
#125 0x3ff8202ffcc in exc_raise(0x3ffc1cd6ed0, 0x0, 0x78018, 0x0, 0x0, 0x104418) DebugInformationStrippedFromFile87
#126 0x3ff82030198 in exc_raise_status(0x45586732, 0x2, 0x0, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile87
#127 0x3ff8202fe54 in cma__error(0x0, 0x0, 0x0, 0x0, 0x3ff82049380, 0xaaaaaaaa00000073) DebugInformationStrippedFromFile86
#128 0x3ff8204937c in UnknownProcedure9FromFile108(0x3ffc0d18650, 0x0, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile108
#129 0x3ff81029228 in __cma_tis_mutex_unlock(0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff810277f0, 0xaaaaaaaa0000000a) DebugInformationStrippedFromFile25
#130 0x3ff810277ec in __rec_mutex_unlock(0x3ffc0d18640, 0xaaaaaaaaaaaaaaaa, 0x3ff8102a024, 0xaaaaaaaaaaaaaaaa, 0x3ff82030f74, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile2
#131 0x3ff81045f14 in getenv(0x3ff8102a064, 0x0, 0x3ff81019828, 0x3ffc1cd70da, 0x3ff81029fe4, 0xaaaa0042aaaaaaaa) DebugInformationStrippedFromFile77
#132 0x3ff8102a060 in __catopen(0x3ffc1cd70d0, 0x3ffc1c9b7c0, 0x3ffc1cd7158, 0x3ffc1c94cf0, 0x3ffc1c9b7d8, 0x2) DebugInformationStrippedFromFile28
#133 0x3ff82030f8c in cma__error_inq_text(0x177db037, 0x3ffc1cd730b, 0x3ffc1cd7418, 0x104418, 0x0, 0x6) DebugInformationStrippedFromFile91
#134 0x3ff82030390 in exc_get_message(0x3ffc1cd7510, 0x0, 0x0, 0x3e, 0x43, 0x0) DebugInformationStrippedFromFile87
#135 0x3ff8202fecc in exc_report(0x0, 0x3e, 0x43, 0x0, 0x3ff8202ffd0, 0x11ffffd58) DebugInformationStrippedFromFile87
#136 0x3ff8202ffcc in exc_raise(0x3ffc1cd7510, 0x0, 0x78018, 0x0, 0x0, 0x104418) DebugInformationStrippedFromFile87
#137 0x3ff82030198 in exc_raise_status(0x45586732, 0x2, 0x0, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile87
#138 0x3ff8202fe54 in cma__error(0x0, 0x0, 0x0, 0x0, 0x3ff82049380, 0x0) DebugInformationStrippedFromFile86
#139 0x3ff8204937c in UnknownProcedure9FromFile108(0x3ffc0d18650, 0x0, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile108
#140 0x3ff81029228 in __cma_tis_mutex_unlock(0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff8102937c, 0xaaaaaaaaaaaaaaaa, 0x3ff810277f0, 0xaaaaaaaa0000000a) DebugInformationStrippedFromFile25
#141 0x3ff810277ec in __rec_mutex_unlock(0x3ffc0d18640, 0xaaaaaaaaaaaaaaaa, 0x3ff8102a024, 0xaaaaaaaaaaaaaaaa, 0x3ff82030f74, 0x104418) DebugInformationStrippedFromFile2
#142 0x3ff81045f14 in getenv(0x3ff8102a064, 0x0, 0x0, 0x3ffc1cd771a, 0x3ff81029fe4, 0xaaaa0042aaaaaaaa) DebugInformationStrippedFromFile77
#143 0x3ff8102a060 in __catopen(0x3ffc1cd7710, 0x3ffc1c9b7c0, 0x3ffc1cd7798, 0x3ffc1c94cf0, 0x3ffc1c9b7d8, 0x2) DebugInformationStrippedFromFile28
#144 0x3ff82030f8c in cma__error_inq_text(0x177db037, 0x3ffc1cd794b, 0x3ffc1cd7a58, 0x104418, 0x0, 0x0) DebugInformationStrippedFromFile91
#145 0x3ff82030390 in exc_get_message(0x3ffc1cd7e78, 0x0, 0x0, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile87
#146 0x3ff8202fecc in exc_report(0x0, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0x3ff8202ffd0, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile87
#147 0x3ff8202ffcc in exc_raise(0x3ffc1cd7e78, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile87
#148 0x3ff82030240 in exc_pop_ctx(0x3ffc1cd7bd0, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0x3ff8203b620, 0x0, 0xaaaaaaaa00000000) DebugInformationStrippedFromFile87
#149 0x3ff82041e50 in cma__thread_base(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0x2, 0x120014db0) DebugInformationStrippedFromFile101
(ladebug) show thread
   Id                  State         
   0xfffffc0007b14b80  running       
   0xfffffc0005184000  unstarted     
   0xfffffc0005184800  unstarted     
   0xfffffc000195d400  unstarted     
   0xfffffc000195c800  unstarted     
   0xfffffc0006933800  unstarted     
   0xfffffc0006932c00  unstarted     
>* 0xfffffc0006933000  stopped       
(ladebug) thread 0xfffffc0007b14b80
   Id                  State         
>  0xfffffc0007b14b80  running       

(ladebug) where
>0  0x3ff8280e574 in msg_receive_trap(0xe7218, 0x3ffc1c9e9f8, 0x0, 0x39e7000000000, 0x768, 0x3d) DebugInformationStrippedFromFile19
#1  0x3ff82804dd0 in msg_receive(0x4e, 0x0, 0xd8018, 0x0, 0x1, 0x3ffc1c9e9f8) DebugInformationStrippedFromFile6
#2  0x3ff820485dc in cma__vp_sleep(0x2801000000, 0x1, 0x7, 0xe7218, 0x3ff00000000, 0x3ffc3013530) DebugInformationStrippedFromFile106
#3  0x3ff8202e958 in cma__dispatch(0x7, 0xe7218, 0x3ff00000000, 0x3ffc3013530, 0x3ff82027e34, 0x3ffc30002b8) DebugInformationStrippedFromFile85
#4  0x3ff82027e30 in cma__int_wait(0x11ffff328, 0xe7218, 0x3ffc1c9e9f8, 0x1000, 0x141fd000, 0x141cc300) DebugInformationStrippedFromFile3
#5  0x3ff820411e0 in cma_thread_join(0x11ffff748, 0x11ffffaf0, 0x11ffffae8, 0x3ff82041bf0, 0x0, 0x3ffc01e3de0) DebugInformationStrippedFromFile101
#6  0x3ff82037508 in pthread_join(0x104c18, 0x400000000000008, 0x11ffffc00, 0x3ffc1c9e9f8, 0x120015678, 0xe7418) DebugInformationStrippedFromFile95
#7  0x1200156ec in main() fsdxSubThreads.cxx:292
(ladebug) thread 0xfffffc0005184000
   Id                  State         
>  0xfffffc0005184000  unstarted     

(ladebug) where
>0  0x3ff8280e574 in msg_receive_trap(0x50218, 0x105c18, 0x0, 0x359d000000000, 0x6b8, 0x39) DebugInformationStrippedFromFile19
#1  0x3ff82804dd0 in msg_receive(0x47, 0x0, 0x90018, 0x0, 0x1, 0x105c18) DebugInformationStrippedFromFile6
#2  0x3ff820485dc in cma__vp_sleep(0x2801000000, 0x1, 0xa, 0x50218, 0x0, 0x2) DebugInformationStrippedFromFile106
#3  0x3ff8202e958 in cma__dispatch(0xa, 0x50218, 0x0, 0x2, 0x3ff82027e34, 0x10c848) DebugInformationStrippedFromFile85
#4  0x3ff82027e30 in cma__int_wait(0x3ff82037eb4, 0x50218, 0x105c18, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile3
#5  0x3ff82036a30 in pthread_cond_wait(0x3ffbffd31d8, 0x0, 0x3ffbffd32c0, 0x50118, 0x10c818, 0x50218) DebugInformationStrippedFromFile95
#6  0x3ffbffd31d4 in send_thread(parm=0xa3a08) btcu_s.c:129
#7  0x3ff82041ccc in cma__thread_base(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xa3a08, 0x3ffbffd3150) DebugInformationStrippedFromFile101
(ladebug) thread 0xfffffc0005184800
   Id                  State         
>  0xfffffc0005184800  unstarted     

(ladebug) where
>0  0x3ff8108c648 in __recv(0x1, 0x105818, 0x0, 0x1, 0x0, 0x1) DebugInformationStrippedFromFile401
#1  0x3ffbffd2d5c in xrecv(s=3, buf=0x3ffc1cafb38, len=4, flag=0) btcu_r.c:409
#2  0x3ffbffd2678 in receive_thread(parm=0xa3a08) btcu_r.c:218
#3  0x3ff82041ccc in cma__thread_base(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xa3a08, 0x3ffbffd2630) DebugInformationStrippedFromFile101
(ladebug) thread 0xfffffc000195d400
   Id                  State         
>  0xfffffc000195d400  unstarted     

(ladebug) where
>0  0x3ff8280e574 in msg_receive_trap(0x50218, 0x105418, 0x0, 0x3bcf000000000, 0x778, 0x3e) DebugInformationStrippedFromFile19
#1  0x3ff82804dd0 in msg_receive(0x59, 0x0, 0x90018, 0x0, 0x1, 0x105418) DebugInformationStrippedFromFile6
#2  0x3ff820485dc in cma__vp_sleep(0x2801000000, 0x1, 0x10, 0x50218, 0x0, 0x2) DebugInformationStrippedFromFile106
#3  0x3ff8202e958 in cma__dispatch(0x10, 0x50218, 0x0, 0x2, 0x3ff82027e34, 0xe7748) DebugInformationStrippedFromFile85
#4  0x3ff82027e30 in cma__int_wait(0x3ff82037eb4, 0x50218, 0x105418, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile3
#5  0x3ff82036a30 in pthread_cond_wait(0x3ffbffd31d8, 0x0, 0x3ffbffd32c0, 0x50118, 0xe7718, 0x50218) DebugInformationStrippedFromFile95
#6  0x3ffbffd31d4 in send_thread(parm=0xa3808) btcu_s.c:129
#7  0x3ff82041ccc in cma__thread_base(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xa3808, 0x3ffbffd3150) DebugInformationStrippedFromFile101
(ladebug) thread 0xfffffc000195c800
   Id                  State         
>  0xfffffc000195c800  unstarted     

(ladebug) where
>0  0x3ff8280e574 in msg_receive_trap(0x50218, 0x105018, 0x0, 0x3c49000000000, 0x780, 0x3e) DebugInformationStrippedFromFile19
#1  0x3ff82804dd0 in msg_receive(0x5b, 0x0, 0x90018, 0x0, 0x1, 0x105018) DebugInformationStrippedFromFile6
#2  0x3ff820485dc in cma__vp_sleep(0x2801000000, 0x1, 0x13, 0x50218, 0x0, 0xa3428) DebugInformationStrippedFromFile106
#3  0x3ff8202e958 in cma__dispatch(0x13, 0x50218, 0x0, 0xa3428, 0x3ff82027e34, 0x50218) DebugInformationStrippedFromFile85
#4  0x3ff82027e30 in cma__int_wait(0x3ff82037eb4, 0x50218, 0x105018, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile3
#5  0x3ff82036a30 in pthread_cond_wait(0x3ffbffd27f4, 0x0, 0x3ffbffd27ac, 0x50118, 0xe7818, 0x50218) DebugInformationStrippedFromFile95
#6  0x3ffbffd27f0 in receive_thread(parm=0xa3808) btcu_r.c:254
#7  0x3ff82041ccc in cma__thread_base(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xa3808, 0x3ffbffd2630) DebugInformationStrippedFromFile101
(ladebug) thread 0xfffffc0006933800
   Id                  State         
>  0xfffffc0006933800  unstarted     

(ladebug) where
>0  0x3ff8280e574 in msg_receive_trap(0x16100, 0x0, 0x4f1c000000000, 0x3a24000000000, 0x768, 0x3d) DebugInformationStrippedFromFile19
#1  0x3ff82804dd0 in msg_receive(0x4f, 0x14, 0xde100, 0x2, 0x3ffc0d184e8, 0x3ffc1cc5370) DebugInformationStrippedFromFile6
#2  0x3ff820485dc in cma__vp_sleep(0x28010de100, 0x0, 0x16, 0x104c18, 0x0, 0x3ffc1cc5370) DebugInformationStrippedFromFile106
#3  0x3ff8202e958 in cma__dispatch(0x16, 0x104c18, 0x0, 0x3ffc1cc5370, 0x3ff820341d4, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile85
#4  0x3ff820341d0 in cma__int_mutex_block(0x3ffc1cc5470, 0xa9888, 0x0, 0x0, 0x0, 0x0) DebugInformationStrippedFromFile93
#5  0x3ff82037eb0 in pthread_mutex_lock(0x0, 0x0, 0x120014f34, 0x104c18, 0x120014f0c, 0xe7518) DebugInformationStrippedFromFile95
#6  0x120014f30 in fsdxReads(arg=0x0) fsdxSubThreads.cxx:80
#7  0x3ff82041ccc in cma__thread_base(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0x0, 0x120014db0) DebugInformationStrippedFromFile101
(ladebug) thread 0xfffffc0006932c00
   Id                  State         
>  0xfffffc0006932c00  unstarted     

(ladebug) where
>0  0x3ff8280e574 in msg_receive_trap(0x16200, 0x0, 0x4f1c000000000, 0x3a24000000000, 0x768, 0x3d) DebugInformationStrippedFromFile19
#1  0x3ff82804dd0 in msg_receive(0x50, 0x14, 0xde180, 0x2, 0x3ffc0d184e8, 0x3ffc1ccd370) DebugInformationStrippedFromFile6
#2  0x3ff820485dc in cma__vp_sleep(0x28010de180, 0x0, 0x19, 0x104818, 0x0, 0x3ffc1ccd370) DebugInformationStrippedFromFile106
#3  0x3ff8202e958 in cma__dispatch(0x19, 0x104818, 0x0, 0x3ffc1ccd370, 0x3ff820341d4, 0xaaaaaaaaaaaaaaaa) DebugInformationStrippedFromFile85
#4  0x3ff820341d0 in cma__int_mutex_block(0x3ffc1ccd470, 0xa9908, 0x0, 0x0, 0x1, 0x0) DebugInformationStrippedFromFile93
#5  0x3ff82037eb0 in pthread_mutex_lock(0x1, 0x0, 0x120014f34, 0x104818, 0x120014f0c, 0xe7518) DebugInformationStrippedFromFile95
#6  0x120014f30 in fsdxReads(arg=0x1) fsdxSubThreads.cxx:80
#7  0x3ff82041ccc in cma__thread_base(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0x1, 0x120014db0) DebugInformationStrippedFromFile101
(ladebug) call cma_debug()
Thread received signal SEGV
Called routine terminated by longjmp or fault
stopped at [_doprnt 0x3ff8102d7a8]	
(ladebug) quit
NYCSEX0000.btco.com> logout
ksh: logout:  not found
NYCSEX0000.btco.com> 

Connection closed by foreign host.
NYGTSX0002.btco.com> ^Dlogout

Local -011- Session 1 disconnected from NYGTSX0002

*logout

Local -020- Logged out port 8 on server RED_B39_073_D2

NO CARRIER
~
[EOT]
csh> ^D
script done on Wed Jun  4 19:59:56 1997



1551.9DCETHD::BUTENHOFDave Butenhof, DECthreadsThu Jun 05 1997 11:4559
Sequence: some exception was raised in the thread, and was not handled. The
stack was unwound to cma__thread_base (a DECthreads frame at the base of
every created thread). It handles all exceptions, mostly because it needs to
CATCH alert and exit. Because this was NOT one of those exceptions, it tried
to reraise the exception to result in process termination. Because there were
no more handlers on the DECthreads exception stack, DECthreads attempted to
format and print a message reporting the nature of the exception prior to
terminating the process. However, in the process of opening the message
catalog file, libc called something that called getenv, which attempted to
unlock a mutex (presumably after having locked it successfully, though we
can't know that for sure from the stack trace). The attempt to unlock,
however, suffered from an error of some sort, resulting in a call to
cma_error to raise an exception. Which, because there were no exception
handlers, attempted to terminate the process, after writing an informative
message by opening a message catalog... And so forth. Because you were
running under the debugger, it appears that none of these exceptions were
signals (or, at least, not the signals for which the default action is
"catch"... which should include all of the hardware errors like SEGV, unless
you have a .dbxinit that "ignore"s some or all?)

There are a few odd things here. First, the error reported by
__cma_tis_mutex_unlock must be occurring AFTER the mutex has been unlocked,
because the subsequent cycles are also able to reach the unlock call. I don't
see how this could make any sense. Furthermore, although the cycle repeats
identically 13 times, on the 14th cycle it appears that catopen manages to
complete, and we proceed to format a text string (sprintf) using the message
we've acquired -- leading to a SEGV in the depths of the printf subsystem.
(This likely implies that we have acquired garbage from the catalog file,
implying that the catalog open & get operations only APPEARED to succeed.)

If you can reproduce this again under the debugger with a breakpoint set on
cma__error and/or exc_raise_status, and report the actual value of $r16, we
would be able to determine the exception. (I don't trust the value of
argument registers shown in a stack trace, and, if the values shown in your
output are correct, the argument is garbage.)

Possible trivia:

I'm a little uncomfortable with your build command. Offhand, I don't see any
harm, but you're putting libc_r in the wrong place in the search order. The
library is automatically included (in the proper place) by "-threads", so I
would like you to remove the explicit -lc_r.

Are you sure expirationTime is initialized correctly? What is the actual TYPE
of the data (returned in?) the buffer to which expirationTime points? Is it a
character string of 8 bytes? (Seven characters plus a null terminator?) If
not, then I would strongly suggest that you utilize the appropriate TYPE
rather than making assumptions.

For example, I can't help wondering if this is a "struct timeval" or a
"struct timespec". If so, you should declare it (and, if it must be allocated
dynamically, specify the allocation size) using the proper type. For example,
(and I don't know if this is what you intend), if the type was the "struct
timespec" commonly used in POSIX realtime and threads interfaces, you should
declare it as "struct timespec *expirationTime;" and allocate it using "=
malloc(sizeof(struct timespec));" (The size of a struct timespec is 16 bytes
(although the older BSD struct timeval is 8 bytes, that's NOT a good [or
necessary] assumption to make, and at best it obscures the meaning of the
code.)
1551.10Thanks. I will try out your suggestions.CREME::LAMPERTPat Lampert, UNIX Applications Support, 343-1050Thu Jun 05 1997 14:1323

>>I'm a little uncomfortable with your build command.


Thanks for pointing this out. I had not intended to leave lc_r in the
make file. The customer was manually including all the re-entrant libraries
and specifying -lpthreads. I edited the make file intending to replace 
all this with "-threads", and accidentally left the lc_r in place.


>>Are you sure expirationTime is initialized correctly? 

Now that its daytime, I will check with the customer on this. I am not
familiar with the code so my guess was based on looking at another 
similar module.


Thanks again.

Pat