Changeset 81 in libcf for trunk/src/cf_thread.c


Ignore:
Timestamp:
04/30/13 17:24:19 (11 years ago)
Author:
cheese
Message:

#1 fix for r80

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/cf_thread.c

    r80 r81  
    7373    THREAD_WORKER f = (THREAD_WORKER) callback;
    7474
    75     TRY
     75#if defined(_WIN32) || defined(_WIN64)
     76    *threadID = (THREAD_TYPE) CreateThread (NULL, 0, f, arg, 0, NULL);
     77    if (*threadID == NULL)
     78        return CF_ERROR_THREAD_CREATE;
     79#else
     80
     81    pthread_attr_t      * attr = NULL;
     82# if defined(_SOLARIS)
     83    pthread_attr_t      solarisAttr;
     84    struct sched_param  sched;
     85
     86    attr = &solarisAttr;
     87
     88    result = pthread_attr_init (attr);
     89    if (result)
     90        return CF_ERROR_THREAD_INIT_ATTR;
     91
     92    result = pthread_attr_setinheritsched (attr, PTHREAD_EXPLICIT_SCHED);
     93    if (result)
     94        return CF_ERROR_THREAD_SET_INHERIT_SCHED;
     95
     96    result = pthread_attr_setschedpolicy (attr, SCHED_RR);
     97    if (result)
     98        return CF_ERROR_THREAD_SET_SCHED_POLICY;
     99
     100    sched.sched_priority = 1;
     101    result = pthread_attr_setschedparam (attr, &sched);
     102    if (result)
     103        return CF_ERROR_THREAD_SET_SCHED_PARAM;
     104# endif // # if defined(_SOLARIS)
     105
     106    *threadID = (THREAD_TYPE *) calloc (sizeof (THREAD_TYPE), 1);
     107    if (*threadID == NULL)
     108        return CF_ERROR_THREAD_ALLOC;
     109
     110    result = pthread_create ((THREAD_TYPE *) *threadID, attr, f, arg);
     111    if (result < 0)
    76112    {
    77 #if defined(_WIN32) || defined(_WIN64)
    78 
    79         *threadID = (THREAD_TYPE) CreateThread (NULL, 0, f, arg, 0, NULL);
    80         if (*threadID == NULL)
    81         {
    82             result = CF_ERROR_THREAD_CREATE;
    83             TRY_BREAK;
    84         }
    85 #else
    86 # if defined(_SOLARIS)
    87         pthread_attr_t      attr;
    88         struct sched_param  sched;
    89 
    90         result = pthread_attr_init (&attr);
    91         if (result)
    92         {
    93             result = CF_ERROR_THREAD_INIT_ATTR;
    94             TRY_BREAK;
    95         }
    96 
    97         result = pthread_attr_setinheritsched (&attr, PTHREAD_EXPLICIT_SCHED);
    98         if (result)
    99         {
    100             result = CF_ERROR_THREAD_SET_INHERIT_SCHED;
    101             TRY_BREAK;
    102         }
    103 
    104         result = pthread_attr_setschedpolicy (&attr, SCHED_RR);
    105         if (result)
    106         {
    107             result = CF_ERROR_THREAD_SET_SCHED_POLICY;
    108             TRY_BREAK;
    109         }
    110 
    111         sched.sched_priority = 1;
    112         result = pthread_attr_setschedparam (&attr, &sched);
    113         if (result)
    114         {
    115             result = CF_ERROR_THREAD_SET_SCHED_PARAM;
    116             TRY_BREAK;
    117         }
    118 # endif // # if defined(_SOLARIS)
    119 
    120         *threadID = (THREAD_TYPE *) calloc (sizeof (THREAD_TYPE), 1);
    121         if (*threadID == NULL)
    122         {
    123             result = CF_ERROR_THREAD_ALLOC;
    124             TRY_BREAK;
    125         }
    126 
    127         result = pthread_create ((THREAD_TYPE *) *threadID, &attr, f, arg);
    128         if (result < 0)
    129         {
    130             result = CF_ERROR_THREAD_CREATE;
    131             TRY_BREAK;
    132         }
    133 #endif
     113        CF_Thread_Release (threadID);
     114        return CF_ERROR_THREAD_CREATE;
    134115    }
    135     CATCH_IF (result < 0)
    136     {
    137         if (result == CF_ERROR_THREAD_ALLOC ||
    138             result == CF_ERROR_THREAD_CREATE)
    139             CF_Thread_Release (threadID);
    140     }
    141 
     116
     117#endif
    142118    return result;
    143119}
     
    157133    ASSERT_THREAD (*threadID);
    158134
    159     CF_Thread_Local_Close (*threadID);
    160 
    161     return CF_OK;
     135    return CF_Thread_Local_Close (*threadID);
    162136}
    163137
     
    231205    pthread_mutex_destroy (*mutex);
    232206#endif
    233     CF_Thread_Local_Close (*mutex);
    234 
    235     return CF_OK;
     207    return CF_Thread_Local_Close (*mutex);
    236208}
    237209
Note: See TracChangeset for help on using the changeset viewer.