| 138 | } |
| 139 | |
| 140 | static void init_log_mutex(acl_pthread_mutex_t *lock) |
| 141 | { |
| 142 | #ifdef ACL_UNIX |
| 143 | int n1, n2; |
| 144 | pthread_mutexattr_t attr; |
| 145 | |
| 146 | assert(lock); |
| 147 | |
| 148 | n1 = pthread_mutexattr_init(&attr); |
| 149 | |
| 150 | /* ʹ���� pthread_atfork() ������ fork �����������Ϊ�� fork ǰ���ù� |
| 151 | * �������̣������轫������Ϊ�ݹ��� --- zsx, 2019.8.6 |
| 152 | */ |
| 153 | # if defined(ACL_FREEBSD) || defined(ACL_SUNOS5) || defined(ACL_MACOSX) || defined(ALPINE) |
| 154 | n2 = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); |
| 155 | # elif defined(MINGW) |
| 156 | n2 = 0; |
| 157 | # elif defined(PTHREAD_MUTEX_RECURSIVE_NP) |
| 158 | n2 = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP); |
| 159 | # else |
| 160 | n2 = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); |
| 161 | # endif |
| 162 | thread_mutex_init(lock, !n1 && !n2 ? &attr : NULL); |
| 163 | #else |
| 164 | thread_mutex_init(lock, NULL); |
| 165 | #endif |
| 166 | } |
| 167 | |
| 168 | void acl_log_fp_set(ACL_VSTREAM *fp, const char *logpre) |
| 169 | { |
no test coverage detected
searching dependent graphs…