Changeset 3371


Ignore:
Timestamp:
May 27, 2007, 8:37:38 AM (18 years ago)
Author:
bird
Message:

perhaps we should exit all MCs before comitting suicide?

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/libc-0.6/src/emx/src/lib/sys/logstrict.c

    r2796 r3371  
    611611static void __libc_logWrite(__LIBC_PLOGINST pInst, unsigned fGroupAndFlags, const char *pszMsg, size_t cch, int fStdErr)
    612612{
    613     APIRET  rc;
     613    APIRET  rcSem;
     614    APIRET  rcMC;
     615    ULONG   ulIgnore = 0;
    614616    ULONG   cb = 0;
    615617    HMTX    hmtx = pInst->hmtx;
     
    619621    /*
    620622     * Aquire mutex ownership.
    621      */
    622     rc = DosRequestMutexSem(hmtx, SEM_INDEFINITE_WAIT);
    623     switch (rc)
    624     {
    625         case 0:
     623     * We enter a must-complete section here to avoid getting interrupted
     624     * while writing and creating deadlocks.
     625     */
     626    rcMC = DosEnterMustComplete(&ulIgnore);
     627    rcSem = DosRequestMutexSem(hmtx, 5000);
     628    switch (rcSem)
     629    {
     630        case NO_ERROR:
    626631            break;
     632
    627633        /* recreate the semaphore for some odd. */
    628634        case ERROR_INVALID_HANDLE:
     
    630636        {
    631637            HMTX    hmtxNew;
    632             rc = DosCreateMutexSem(NULL, &hmtxNew, 0, TRUE);
    633             if (!rc)
     638            rcSem = DosCreateMutexSem(NULL, &hmtxNew, 0, TRUE);
     639            if (!rcSem)
    634640            {
    635641                hmtx = __lxchg((int*)&pInst->hmtx, hmtxNew);
     
    647653    if (fGroupAndFlags & __LIBC_LOG_MSGF_FLUSH)
    648654        DosResetBuffer(pInst->hFile);
    649     if (!rc)
     655    if (!rcSem)
    650656        DosReleaseMutexSem(pInst->hmtx);
     657    if (!rcMC)
     658        DosExitMustComplete(&ulIgnore);
    651659    FS_RESTORE();
    652660
  • trunk/libc/src/kNIX/os2/logstrict.c

    r2929 r3371  
    592592static void __libc_logWrite(__LIBC_PLOGINST pInst, unsigned fGroupAndFlags, const char *pszMsg, size_t cch, int fStdErr)
    593593{
    594     APIRET  rc;
     594    APIRET  rcSem;
     595    APIRET  rcMC;
     596    ULONG   ulIgnore = 0;
    595597    ULONG   cb = 0;
    596598    HMTX    hmtx = pInst->hmtx;
     
    600602    /*
    601603     * Aquire mutex ownership.
    602      */
    603     rc = DosRequestMutexSem(hmtx, SEM_INDEFINITE_WAIT);
    604     switch (rc)
    605     {
    606         case 0:
     604     * We enter a must-complete section here to avoid getting interrupted
     605     * while writing and creating deadlocks.
     606     */
     607    rcMC = DosEnterMustComplete(&ulIgnore);
     608    rcSem = DosRequestMutexSem(hmtx, 5000);
     609    switch (rcSem)
     610    {
     611        case NO_ERROR:
    607612            break;
     613
    608614        /* recreate the semaphore for some odd. */
    609615        case ERROR_INVALID_HANDLE:
     
    611617        {
    612618            HMTX    hmtxNew;
    613             rc = DosCreateMutexSem(NULL, &hmtxNew, 0, TRUE);
    614             if (!rc)
     619            rcSem = DosCreateMutexSem(NULL, &hmtxNew, 0, TRUE);
     620            if (!rcSem)
    615621            {
    616622                hmtx = __lxchg((int*)&pInst->hmtx, hmtxNew);
     
    628634    if (fGroupAndFlags & __LIBC_LOG_MSGF_FLUSH)
    629635        DosResetBuffer(pInst->hFile);
    630     if (!rc)
     636    if (!rcSem)
    631637        DosReleaseMutexSem(pInst->hmtx);
     638    if (!rcMC)
     639        DosExitMustComplete(&ulIgnore);
    632640    FS_RESTORE();
    633641
Note: See TracChangeset for help on using the changeset viewer.