Changeset 81 in libcf
- Timestamp:
- 04/30/13 17:24:19 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/cf_thread.c
r80 r81 73 73 THREAD_WORKER f = (THREAD_WORKER) callback; 74 74 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) 76 112 { 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; 134 115 } 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 142 118 return result; 143 119 } … … 157 133 ASSERT_THREAD (*threadID); 158 134 159 CF_Thread_Local_Close (*threadID); 160 161 return CF_OK; 135 return CF_Thread_Local_Close (*threadID); 162 136 } 163 137 … … 231 205 pthread_mutex_destroy (*mutex); 232 206 #endif 233 CF_Thread_Local_Close (*mutex); 234 235 return CF_OK; 207 return CF_Thread_Local_Close (*mutex); 236 208 } 237 209
Note:
See TracChangeset
for help on using the changeset viewer.