4 * Copyright 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
8 * Woojin Jung <woojin2.jung@samsung.com>
9 * Jaewon Lim <jaewon81.lim@samsung.com>
10 * Juyoung Kim <j0.kim@samsung.com>
12 * This library is free software; you can redistribute it and/or modify it under
13 * the terms of the GNU Lesser General Public License as published by the
14 * Free Software Foundation; either version 2.1 of the License, or (at your option)
17 * This library is distributed in the hope that it will be useful, but WITHOUT ANY
18 * WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
20 * License for more details.
22 * You should have received a copy of the GNU Lesser General Public License
23 * along with this library; if not, write to the Free Software Foundation, Inc., 51
24 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
35 #include "probeinfo.h"
41 static enum DaOptions _sopt = OPT_THREAD;
43 int pthread_mutex_init(pthread_mutex_t *mutex,
44 const pthread_mutexattr_t *attr) {
45 static int (*pthread_mutex_initp)(pthread_mutex_t *mutex,
46 const pthread_mutexattr_t *attr);
48 BEFORE_ORIGINAL_SYNC(pthread_mutex_init, LIBPTHREAD);
50 BEFORE_PACK_ORIGINAL_SYNC(pthread_mutex_init, LIBPTHREAD);
52 ret = pthread_mutex_initp(mutex, attr);
54 AFTER_ORIGINAL_SYNCVAL_RET(VT_INT, ret, mutex, SYNC_PTHREAD_MUTEX,
55 SYNC_API_OTHER, "%p,%p", mutex, attr);
57 AFTER_PACK_ORIGINAL_SYNC(ret, mutex, SYNC_PTHREAD_MUTEX,
58 SYNC_API_OTHER, "pp", mutex, attr);
63 int pthread_mutex_destroy(pthread_mutex_t *mutex) {
64 static int (*pthread_mutex_destroyp)(pthread_mutex_t *mutex);
66 BEFORE_ORIGINAL_SYNC(pthread_mutex_destroy, LIBPTHREAD);
68 BEFORE_PACK_ORIGINAL_SYNC(pthread_mutex_destroy, LIBPTHREAD);
70 ret = pthread_mutex_destroyp(mutex);
72 AFTER_ORIGINAL_SYNCVAL_RET(VT_INT, ret, mutex, SYNC_PTHREAD_MUTEX,
73 SYNC_API_OTHER, "%p", mutex);
75 AFTER_PACK_ORIGINAL_SYNC(ret, mutex, SYNC_PTHREAD_MUTEX,
76 SYNC_API_OTHER, "p", mutex);
81 int real_pthread_mutex_lock(pthread_mutex_t *mutex) {
82 static int (*pthread_mutex_lockp)(pthread_mutex_t *mutex);
84 GET_REAL_FUNC(pthread_mutex_lock, LIBPTHREAD);
86 return pthread_mutex_lockp(mutex);
89 int pthread_mutex_lock(pthread_mutex_t *mutex) {
90 static int (*pthread_mutex_lockp)(pthread_mutex_t *mutex);
92 DECLARE_VARIABLE_STANDARD;
93 GET_REAL_FUNC(pthread_mutex_lock, LIBPTHREAD);
95 PRE_PROBEBLOCK_BEGIN();
96 // send WAIT_START log
98 APPEND_LOG_BASIC(LC_SYNC);
99 APPEND_LOG_INPUT("%p", mutex);
100 //ret,PCAddr,errno,InternalCall
101 log.length += sprintf(log.data + log.length, "`,`,0`,0`,%d", blockresult);
103 log.length += sprintf(log.data + log.length, "`,%p`,%d`,%d", mutex,
104 SYNC_PTHREAD_MUTEX, SYNC_API_ACQUIRE_WAIT_START);
105 APPEND_LOG_NULL_CALLSTACK();
106 printLog(&log, MSG_LOG);
109 PACK_COMMON_BEGIN(MSG_PROBE_SYNC, LC_SYNC, "p", mutex);
110 PACK_COMMON_END(0, 0, blockresult);
111 PACK_SYNC(mutex, SYNC_PTHREAD_MUTEX, SYNC_API_ACQUIRE_WAIT_START);
114 PRE_PROBEBLOCK_END();
116 ret = pthread_mutex_lockp(mutex);
120 if(postBlockBegin(blockresult)) {
121 setProbePoint(&probeInfo);
123 APPEND_LOG_BASIC(LC_SYNC);
124 APPEND_LOG_INPUT("%p", mutex);
125 APPEND_LOG_RESULT(VT_INT, ret);
128 POST_PROBEBLOCK_MIDDLE_SYNCVAL(mutex, SYNC_PTHREAD_MUTEX,
129 SYNC_API_ACQUIRE_WAIT_END);
130 POST_PROBEBLOCK_CALLSTACK();
131 printLog(&log, MSG_LOG);
134 PACK_COMMON_BEGIN(MSG_PROBE_SYNC, LC_SYNC, "p", mutex);
135 PACK_COMMON_END(ret, errno, blockresult);
136 PACK_SYNC(mutex, SYNC_PTHREAD_MUTEX, SYNC_API_ACQUIRE_WAIT_END);
145 int pthread_mutex_timedlock(pthread_mutex_t *mutex,
146 const struct timespec *abs_timeout) {
147 static int (*pthread_mutex_timedlockp)(pthread_mutex_t *mutex,
148 const struct timespec *abs_timeout);
150 DECLARE_VARIABLE_STANDARD;
151 GET_REAL_FUNC(pthread_mutex_timedlock, LIBPTHREAD);
153 PRE_PROBEBLOCK_BEGIN();
154 // send WAIT_START log
156 APPEND_LOG_BASIC(LC_SYNC);
157 APPEND_LOG_INPUT("%p,%p", mutex, abs_timeout);
158 //ret,PCAddr,errno,InternalCall
159 log.length += sprintf(log.data + log.length, "`,`,0`,0`,%d", blockresult);
161 log.length += sprintf(log.data + log.length, "`,%p`,%d`,%d", mutex,
162 SYNC_PTHREAD_MUTEX, SYNC_API_ACQUIRE_WAIT_START);
163 APPEND_LOG_NULL_CALLSTACK();
164 printLog(&log, MSG_LOG);
167 PACK_COMMON_BEGIN(MSG_PROBE_SYNC, LC_SYNC, "pp", mutex, abs_timeout);
168 PACK_COMMON_END(0, 0, blockresult);
169 PACK_SYNC(mutex, SYNC_PTHREAD_MUTEX, SYNC_API_ACQUIRE_WAIT_START);
172 PRE_PROBEBLOCK_END();
174 ret = pthread_mutex_timedlockp(mutex, abs_timeout);
178 if(postBlockBegin(blockresult)) {
179 setProbePoint(&probeInfo);
181 APPEND_LOG_BASIC(LC_SYNC);
182 APPEND_LOG_INPUT("%p,%p", mutex, abs_timeout);
183 APPEND_LOG_RESULT(VT_INT, ret);
186 POST_PROBEBLOCK_MIDDLE_SYNCVAL(mutex, SYNC_PTHREAD_MUTEX,
187 SYNC_API_ACQUIRE_WAIT_END);
188 POST_PROBEBLOCK_CALLSTACK();
189 printLog(&log, MSG_LOG);
192 PACK_COMMON_BEGIN(MSG_PROBE_SYNC, LC_SYNC, "pp", mutex, abs_timeout);
193 PACK_COMMON_END(ret, errno, blockresult);
194 PACK_SYNC(mutex, SYNC_PTHREAD_MUTEX, SYNC_API_ACQUIRE_WAIT_END);
203 int pthread_mutex_trylock(pthread_mutex_t *mutex) {
204 static int (*pthread_mutex_trylockp)(pthread_mutex_t *mutex);
206 BEFORE_ORIGINAL_SYNC(pthread_mutex_trylock, LIBPTHREAD);
208 BEFORE_PACK_ORIGINAL_SYNC(pthread_mutex_trylock, LIBPTHREAD);
210 ret = pthread_mutex_trylockp(mutex);
212 AFTER_ORIGINAL_SYNCVAL_RET(VT_INT, ret, mutex, SYNC_PTHREAD_MUTEX,
213 SYNC_API_TRY_ACQUIRE, "%p", mutex);
215 AFTER_PACK_ORIGINAL_SYNC(ret, mutex, SYNC_PTHREAD_MUTEX,
216 SYNC_API_TRY_ACQUIRE, "p", mutex);
221 int real_pthread_mutex_unlock(pthread_mutex_t *mutex) {
222 static int (*pthread_mutex_unlockp)(pthread_mutex_t *mutex);
224 GET_REAL_FUNC(pthread_mutex_unlock, LIBPTHREAD);
226 return pthread_mutex_unlockp(mutex);
229 int pthread_mutex_unlock(pthread_mutex_t *mutex) {
230 static int (*pthread_mutex_unlockp)(pthread_mutex_t *mutex);
232 BEFORE_ORIGINAL_SYNC(pthread_mutex_unlock, LIBPTHREAD);
234 BEFORE_PACK_ORIGINAL_SYNC(pthread_mutex_unlock, LIBPTHREAD);
236 ret = pthread_mutex_unlockp(mutex);
238 AFTER_ORIGINAL_SYNCVAL_RET(VT_INT, ret, mutex, SYNC_PTHREAD_MUTEX,
239 SYNC_API_RELEASE, "%p", mutex);
241 AFTER_PACK_ORIGINAL_SYNC(ret, mutex, SYNC_PTHREAD_MUTEX,
242 SYNC_API_RELEASE, "p", mutex);
247 int pthread_mutexattr_init(pthread_mutexattr_t *attr) {
248 static int (*pthread_mutexattr_initp)(pthread_mutexattr_t *attr);
250 BEFORE_ORIGINAL_SYNC(pthread_mutexattr_init, LIBPTHREAD);
252 BEFORE_PACK_ORIGINAL_SYNC(pthread_mutexattr_init, LIBPTHREAD);
254 ret = pthread_mutexattr_initp(attr);
256 AFTER_ORIGINAL_NOSYNCVAL_RET(VT_INT, ret, SYNC_PTHREAD_MUTEX,
257 SYNC_API_OTHER, "%p", attr);
259 AFTER_PACK_ORIGINAL_SYNC(ret, 0, SYNC_PTHREAD_MUTEX,
260 SYNC_API_OTHER, "p", attr);
265 int pthread_mutexattr_destroy(pthread_mutexattr_t *attr) {
266 static int (*pthread_mutexattr_destroyp)(pthread_mutexattr_t *attr);
268 BEFORE_ORIGINAL_SYNC(pthread_mutexattr_destroy, LIBPTHREAD);
270 BEFORE_PACK_ORIGINAL_SYNC(pthread_mutexattr_destroy, LIBPTHREAD);
272 ret = pthread_mutexattr_destroyp(attr);
274 AFTER_ORIGINAL_NOSYNCVAL_RET(VT_INT, ret, SYNC_PTHREAD_MUTEX,
275 SYNC_API_OTHER, "%p", attr);
277 AFTER_PACK_ORIGINAL_SYNC(ret, 0, SYNC_PTHREAD_MUTEX,
278 SYNC_API_OTHER, "p", attr);
283 int pthread_mutexattr_getprioceiling(const pthread_mutexattr_t *attr,
285 static int (*pthread_mutexattr_getprioceilingp)(
286 const pthread_mutexattr_t *attr, int *prioceiling);
288 BEFORE_ORIGINAL_SYNC(pthread_mutexattr_getprioceiling, LIBPTHREAD);
290 BEFORE_PACK_ORIGINAL_SYNC(pthread_mutexattr_getprioceiling, LIBPTHREAD);
292 ret = pthread_mutexattr_getprioceilingp(attr, prioceiling);
294 AFTER_ORIGINAL_NOSYNCVAL_RET(VT_INT, ret, SYNC_PTHREAD_MUTEX,
295 SYNC_API_OTHER, "%p,%p", attr, prioceiling);
297 AFTER_PACK_ORIGINAL_SYNC(ret, 0, SYNC_PTHREAD_MUTEX,
298 SYNC_API_OTHER, "pp", attr, prioceiling);
303 int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *attr,
305 static int (*pthread_mutexattr_setprioceilingp)(
306 pthread_mutexattr_t *attr, int prioceiling);
308 BEFORE_ORIGINAL_SYNC(pthread_mutexattr_setprioceiling, LIBPTHREAD);
310 BEFORE_PACK_ORIGINAL_SYNC(pthread_mutexattr_setprioceiling, LIBPTHREAD);
312 ret = pthread_mutexattr_setprioceilingp(attr, prioceiling);
314 AFTER_ORIGINAL_NOSYNCVAL_RET(VT_INT, ret, SYNC_PTHREAD_MUTEX,
315 SYNC_API_OTHER, "%p,%d", attr, prioceiling);
317 AFTER_PACK_ORIGINAL_SYNC(ret, 0, SYNC_PTHREAD_MUTEX,
318 SYNC_API_OTHER, "pd", attr, prioceiling);
323 int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *attr,
325 static int (*pthread_mutexattr_getprotocolp)(
326 const pthread_mutexattr_t *attr, int *protocol);
328 BEFORE_ORIGINAL_SYNC(pthread_mutexattr_getprotocol, LIBPTHREAD);
330 BEFORE_PACK_ORIGINAL_SYNC(pthread_mutexattr_getprotocol, LIBPTHREAD);
332 ret = pthread_mutexattr_getprotocolp(attr, protocol);
334 AFTER_ORIGINAL_NOSYNCVAL_RET(VT_INT, ret, SYNC_PTHREAD_MUTEX,
335 SYNC_API_OTHER, "%p,%p", attr, protocol);
337 AFTER_PACK_ORIGINAL_SYNC(ret, 0, SYNC_PTHREAD_MUTEX,
338 SYNC_API_OTHER, "pp", attr, protocol);
343 int pthread_mutexattr_setprotocol(pthread_mutexattr_t *attr,
345 static int (*pthread_mutexattr_setprotocolp)(
346 pthread_mutexattr_t *attr, int protocol);
348 BEFORE_ORIGINAL_SYNC(pthread_mutexattr_setprotocol, LIBPTHREAD);
350 BEFORE_PACK_ORIGINAL_SYNC(pthread_mutexattr_setprotocol, LIBPTHREAD);
352 ret = pthread_mutexattr_setprotocolp(attr, protocol);
354 AFTER_ORIGINAL_NOSYNCVAL_RET(VT_INT, ret, SYNC_PTHREAD_MUTEX,
355 SYNC_API_OTHER, "%p,%d", attr, protocol);
357 AFTER_PACK_ORIGINAL_SYNC(ret, 0, SYNC_PTHREAD_MUTEX,
358 SYNC_API_OTHER, "pd", attr, protocol);
363 int pthread_mutexattr_getpshared(const pthread_mutexattr_t *attr,
365 static int (*pthread_mutexattr_getpsharedp)(
366 const pthread_mutexattr_t *attr, int *pshared);
368 BEFORE_ORIGINAL_SYNC(pthread_mutexattr_getpshared, LIBPTHREAD);
370 BEFORE_PACK_ORIGINAL_SYNC(pthread_mutexattr_getpshared, LIBPTHREAD);
372 ret = pthread_mutexattr_getpsharedp(attr, pshared);
374 AFTER_ORIGINAL_NOSYNCVAL_RET(VT_INT, ret, SYNC_PTHREAD_MUTEX,
375 SYNC_API_OTHER, "%p,%p", attr, pshared);
377 AFTER_PACK_ORIGINAL_SYNC(ret, 0, SYNC_PTHREAD_MUTEX,
378 SYNC_API_OTHER, "pp", attr, pshared);
383 int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr,
385 static int (*pthread_mutexattr_setpsharedp)(
386 pthread_mutexattr_t *attr, int pshared);
388 BEFORE_ORIGINAL_SYNC(pthread_mutexattr_setpshared, LIBPTHREAD);
390 BEFORE_PACK_ORIGINAL_SYNC(pthread_mutexattr_setpshared, LIBPTHREAD);
392 ret = pthread_mutexattr_setpsharedp(attr, pshared);
394 AFTER_ORIGINAL_NOSYNCVAL_RET(VT_INT, ret, SYNC_PTHREAD_MUTEX,
395 SYNC_API_OTHER, "%p,%d", attr, pshared);
397 AFTER_PACK_ORIGINAL_SYNC(ret, 0, SYNC_PTHREAD_MUTEX,
398 SYNC_API_OTHER, "pd", attr, pshared);
403 int pthread_mutexattr_gettype(const pthread_mutexattr_t *attr, int *type) {
404 static int (*pthread_mutexattr_gettypep)(
405 const pthread_mutexattr_t *attr, int *type);
407 BEFORE_ORIGINAL_SYNC(pthread_mutexattr_gettype, LIBPTHREAD);
409 BEFORE_PACK_ORIGINAL_SYNC(pthread_mutexattr_gettype, LIBPTHREAD);
411 ret = pthread_mutexattr_gettypep(attr, type);
413 AFTER_ORIGINAL_NOSYNCVAL_RET(VT_INT, ret, SYNC_PTHREAD_MUTEX,
414 SYNC_API_OTHER, "%p,%p", attr, type);
416 AFTER_PACK_ORIGINAL_SYNC(ret, 0, SYNC_PTHREAD_MUTEX,
417 SYNC_API_OTHER, "pp", attr, type);
422 int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type) {
423 static int (*pthread_mutexattr_settypep)(
424 pthread_mutexattr_t *attr, int type);
426 BEFORE_ORIGINAL_SYNC(pthread_mutexattr_settype, LIBPTHREAD);
428 BEFORE_PACK_ORIGINAL_SYNC(pthread_mutexattr_settype, LIBPTHREAD);
430 ret = pthread_mutexattr_settypep(attr, type);
432 AFTER_ORIGINAL_NOSYNCVAL_RET(VT_INT, ret, SYNC_PTHREAD_MUTEX,
433 SYNC_API_OTHER, "%p,%d", attr, type);
435 AFTER_PACK_ORIGINAL_SYNC(ret, 0, SYNC_PTHREAD_MUTEX,
436 SYNC_API_OTHER, "pd", attr, type);
442 int pthread_mutex_getprioceiling(const pthread_mutex_t *mutex,
444 int pthread_mutex_setprioceiling(pthread_mutex_t *mutex,
445 int prioceiling, int *old_ceiling);
448 int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr) {
449 static int (*pthread_cond_initp)(pthread_cond_t *cond,
450 const pthread_condattr_t *attr);
452 BEFORE_ORIGINAL_SYNC(pthread_cond_init, LIBPTHREAD);
454 BEFORE_PACK_ORIGINAL_SYNC(pthread_cond_init, LIBPTHREAD);
456 ret = pthread_cond_initp(cond, attr);
458 AFTER_ORIGINAL_SYNCVAL_RET(VT_INT, ret, cond, SYNC_PTHREAD_COND_VARIABLE,
459 SYNC_API_OTHER, "%p,%p", cond, attr);
461 AFTER_PACK_ORIGINAL_SYNC(ret, cond, SYNC_PTHREAD_COND_VARIABLE,
462 SYNC_API_OTHER, "pp", cond, attr);
467 int pthread_cond_destroy(pthread_cond_t *cond) {
468 static int (*pthread_cond_destroyp)(pthread_cond_t *cond);
470 BEFORE_ORIGINAL_SYNC(pthread_cond_destroy, LIBPTHREAD);
472 BEFORE_PACK_ORIGINAL_SYNC(pthread_cond_destroy, LIBPTHREAD);
474 ret = pthread_cond_destroyp(cond);
476 AFTER_ORIGINAL_SYNCVAL_RET(VT_INT, ret, cond, SYNC_PTHREAD_COND_VARIABLE,
477 SYNC_API_OTHER, "%p", cond);
479 AFTER_PACK_ORIGINAL_SYNC(ret, cond, SYNC_PTHREAD_COND_VARIABLE,
480 SYNC_API_OTHER, "p", cond);
485 int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) {
486 static int (*pthread_cond_waitp)(pthread_cond_t *cond,
487 pthread_mutex_t *mutex);
489 DECLARE_VARIABLE_STANDARD;
490 GET_REAL_FUNC(pthread_cond_wait, LIBPTHREAD);
492 PRE_PROBEBLOCK_BEGIN();
493 // send WAIT_START log
495 APPEND_LOG_BASIC(LC_SYNC);
496 APPEND_LOG_INPUT("%p,%p", cond, mutex);
497 //ret,PCAddr,errno,InternalCall
498 log.length += sprintf(log.data + log.length, "`,`,0`,0`,%d", blockresult);
500 log.length += sprintf(log.data + log.length, "`,%p`,%d`,%d", cond,
501 SYNC_PTHREAD_COND_VARIABLE, SYNC_API_COND_WAIT_START);
502 APPEND_LOG_NULL_CALLSTACK();
503 printLog(&log, MSG_LOG);
506 PACK_COMMON_BEGIN(MSG_PROBE_SYNC, LC_SYNC, "pp", cond, mutex);
507 PACK_COMMON_END(0, 0, blockresult);
508 PACK_SYNC(cond, SYNC_PTHREAD_COND_VARIABLE, SYNC_API_COND_WAIT_START);
511 PRE_PROBEBLOCK_END();
513 ret = pthread_cond_waitp(cond, mutex);
517 if(postBlockBegin(blockresult)) {
518 setProbePoint(&probeInfo);
520 APPEND_LOG_BASIC(LC_SYNC);
521 APPEND_LOG_INPUT("%p,%p", cond, mutex);
522 APPEND_LOG_RESULT(VT_INT, ret);
525 POST_PROBEBLOCK_MIDDLE_SYNCVAL(cond, SYNC_PTHREAD_COND_VARIABLE,
526 SYNC_API_COND_WAIT_END);
527 POST_PROBEBLOCK_CALLSTACK();
528 printLog(&log, MSG_LOG);
531 PACK_COMMON_BEGIN(MSG_PROBE_SYNC, LC_SYNC, "pp", cond, mutex);
532 PACK_COMMON_END(ret, errno, blockresult);
533 PACK_SYNC(cond, SYNC_PTHREAD_COND_VARIABLE, SYNC_API_COND_WAIT_END);
542 int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
543 const struct timespec *abstime) {
544 static int (*pthread_cond_timedwaitp)(pthread_cond_t *cond,
545 pthread_mutex_t *mutex, const struct timespec *abstime);
547 DECLARE_VARIABLE_STANDARD;
548 GET_REAL_FUNC(pthread_cond_timedwait, LIBPTHREAD);
550 PRE_PROBEBLOCK_BEGIN();
551 // send WAIT_START log
553 APPEND_LOG_BASIC(LC_SYNC);
554 APPEND_LOG_INPUT("%p,%p,%p", cond, mutex, abstime);
555 //ret,PCAddr,errno,InternalCall
556 log.length += sprintf(log.data + log.length, "`,`,0`,0`,%d", blockresult);
558 log.length += sprintf(log.data + log.length, "`,%p`,%d`,%d", cond,
559 SYNC_PTHREAD_COND_VARIABLE, SYNC_API_COND_WAIT_START);
560 APPEND_LOG_NULL_CALLSTACK();
561 printLog(&log, MSG_LOG);
564 PACK_COMMON_BEGIN(MSG_PROBE_SYNC, LC_SYNC, "ppp", cond, mutex, abstime);
565 PACK_COMMON_END(0, 0, blockresult);
566 PACK_SYNC(cond, SYNC_PTHREAD_COND_VARIABLE, SYNC_API_COND_WAIT_START);
569 PRE_PROBEBLOCK_END();
571 ret = pthread_cond_timedwaitp(cond, mutex, abstime);
575 if(postBlockBegin(blockresult)) {
576 setProbePoint(&probeInfo);
578 APPEND_LOG_BASIC(LC_SYNC);
579 APPEND_LOG_INPUT("%p,%p,%p", cond, mutex, abstime);
580 APPEND_LOG_RESULT(VT_INT, ret);
583 POST_PROBEBLOCK_MIDDLE_SYNCVAL(cond, SYNC_PTHREAD_COND_VARIABLE,
584 SYNC_API_COND_WAIT_END);
585 POST_PROBEBLOCK_CALLSTACK();
586 printLog(&log, MSG_LOG);
589 PACK_COMMON_BEGIN(MSG_PROBE_SYNC, LC_SYNC, "ppp", cond, mutex, abstime);
590 PACK_COMMON_END(ret, errno, blockresult);
591 PACK_SYNC(cond, SYNC_PTHREAD_COND_VARIABLE, SYNC_API_COND_WAIT_END);
600 int pthread_cond_signal(pthread_cond_t *cond) {
601 static int (*pthread_cond_signalp)(pthread_cond_t *cond);
603 BEFORE_ORIGINAL_SYNC(pthread_cond_signal, LIBPTHREAD);
605 BEFORE_PACK_ORIGINAL_SYNC(pthread_cond_signal, LIBPTHREAD);
607 ret = pthread_cond_signalp(cond);
609 AFTER_ORIGINAL_SYNCVAL_RET(VT_INT, ret, cond, SYNC_PTHREAD_COND_VARIABLE,
610 SYNC_API_NOTIFY, "%p", cond);
612 AFTER_PACK_ORIGINAL_SYNC(ret, cond, SYNC_PTHREAD_COND_VARIABLE,
613 SYNC_API_NOTIFY, "p", cond);
618 int pthread_cond_broadcast(pthread_cond_t *cond) {
619 static int (*pthread_cond_broadcastp)(pthread_cond_t *cond);
621 BEFORE_ORIGINAL_SYNC(pthread_cond_broadcast, LIBPTHREAD);
623 BEFORE_PACK_ORIGINAL_SYNC(pthread_cond_broadcast, LIBPTHREAD);
625 ret = pthread_cond_broadcastp(cond);
627 AFTER_ORIGINAL_SYNCVAL_RET(VT_INT, ret, cond, SYNC_PTHREAD_COND_VARIABLE,
628 SYNC_API_NOTIFY_ALL, "%p", cond);
630 AFTER_PACK_ORIGINAL_SYNC(ret, cond, SYNC_PTHREAD_COND_VARIABLE,
631 SYNC_API_NOTIFY_ALL, "p", cond);
637 int pthread_condattr_init(pthread_condattr_t *attr);
638 int pthread_condattr_destroy(pthread_condattr_t *attr);
639 int pthread_condattr_getclock(const pthread_condattr_t *attr,
640 clockid_t *clock_id);
641 int pthread_condattr_setclock(pthread_condattr_t *attr,
643 int pthread_condattr_getpshared(const pthread_condattr_t *attr, int *pshared);
644 int pthread_condattr_setpshared(pthread_condattr_t *attr, int pshared);
648 int pthread_rwlock_init(pthread_rwlock_t *rwlock,
649 const pthread_rwlockattr_t *attr);
650 int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
651 int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
652 int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
653 int pthread_rwlock_timedrdlock(pthread_rwlock_t *rwlock,
654 const struct timespec *abs_timeout);
655 int pthread_rwlock_timedwrlock(pthread_rwlock_t *rwlock,
656 const struct timespec *abs_timeout);
657 int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
658 int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);
659 int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
660 int pthread_rwlockattr_init(pthread_rwlockattr_t *attr);
661 int pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr);
662 int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *attr,
664 int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *attr,
667 int pthread_spin_init(pthread_spinlock_t *lock, int pshared);
668 int pthread_spin_destroy(pthread_spinlock_t *lock);
669 int pthread_spin_lock(pthread_spinlock_t *lock);
670 int pthread_spin_trylock(pthread_spinlock_t *lock);
671 int pthread_spin_unlock(pthread_spinlock_t *lock);
673 int pthread_barrier_init(pthread_barrier_t *barrier,
674 const pthread_barrierattr_t *attr, unsigned int count);
675 int pthread_barrier_destroy(pthread_barrier_t *barrier);
676 int pthread_barrier_wait(pthread_barrier_t *barrier);
677 int pthread_barrierattr_init(pthread_barrierattr_t *attr);
678 int pthread_barrierattr_destroy(pthread_barrierattr_t *attr);
679 int pthread_barrierattr_getpshared(const pthread_barrierattr_t *attr,
681 int pthread_barrierattr_setpshared(pthread_barrierattr_t,