Open miwarin opened 9 years ago
http://gnats.netbsd.org/41645
たしかに EINVAL は返ってこないけど仕様と見てもマニュアルを見ても「invalidのとき」とは書いてあるが「invalidとはNULLである」とか「NULLだった場合」とは書いていない。
#include <assert.h> #include <errno.h> #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { pthread_cond_t cond; pthread_mutex_t mtx; struct timespec abstime; int ret; /* Create a condition variable with default attributes. */ assert(pthread_cond_init(&cond, NULL) == 0); /* Initialize mutex. */ assert(pthread_mutex_init(&mtx, NULL) == 0); /* Acquire lock. */ assert(pthread_mutex_lock(&mtx) == 0); assert(pthread_cond_timedwait(&cond, &mtx, NULL) == EINVAL); /* Release lock. */ assert(pthread_mutex_unlock(&mtx) == 0); /* Cleanup. */ assert(pthread_cond_destroy(&cond) == 0); assert(pthread_mutex_destroy(&mtx) == 0); printf("passed\n"); return (EXIT_SUCCESS); }
実行
% gcc t.c % ./a.out assertion "pthread_cond_timedwait(&cond, &mtx, NULL) == EINVAL" failed: file "t.c", line 23, function "main" zsh: abort (core dumped) ./a.out
printf してみると 0 が返る。つまり成功。
/* assert(pthread_cond_timedwait(&cond, &mtx, NULL) == EINVAL);*/ ret = pthread_cond_timedwait(&cond, &mtx, NULL); printf("%x\n", ret); printf("%x\n", ETIMEDOUT); printf("%x\n", EINVAL); % ./a.out 0 3c 16 passed
仕様 pthread_cond_timedwait
マニュアル pthread_cond_timedwait(3) - NetBSD Manual Pages
http://gnats.netbsd.org/41645
たしかに EINVAL は返ってこないけど仕様と見てもマニュアルを見ても「invalidのとき」とは書いてあるが「invalidとはNULLである」とか「NULLだった場合」とは書いていない。
実行
printf してみると 0 が返る。つまり成功。
仕様 pthread_cond_timedwait
マニュアル pthread_cond_timedwait(3) - NetBSD Manual Pages