/****************************************************************************** * * Copyright © International Business Machines Corp., 2008 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See * the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * NAME * testpi-5.c * * DESCRIPTION * This testcase verifies if a thread can lock the priority inheritance * mutex multiple times. * * USAGE: * Use run_auto.sh script in current directory to build and run test. * * AUTHOR * * * HISTORY * 2010-04-22 Code cleanup by Gowrishankar * * *****************************************************************************/ #include #include #include #include #include pthread_mutex_t child_mutex; void *child_thread(void *arg) { int ret; ret = pthread_mutex_lock(&child_mutex); if (ret != 0) printf("child thread: Failed to lock child_mutex: %d\n", ret); else printf("child_thread: got lock\n"); sleep(2); printf("child_thread: Trying to get lock 2nd time\n"); ret = pthread_mutex_lock(&child_mutex); if (ret != 0) printf("child thread: Failed to lock child_mutex: %d\n", ret); else printf("child_thread: got lock 2nd time !!\n"); return NULL; } int do_test(int argc, char **argv) { pthread_mutexattr_t mutexattr; int retc, protocol; #if HAS_PRIORITY_INHERIT if (pthread_mutexattr_init(&mutexattr) != 0) printf("Failed to init mutexattr\n"); if (pthread_mutexattr_setprotocol(&mutexattr, PTHREAD_PRIO_INHERIT) != 0) printf("Can't set protocol prio inherit\n"); if (pthread_mutexattr_getprotocol(&mutexattr, &protocol) != 0) printf("Can't get mutexattr protocol\n"); else printf("protocol in mutexattr is %d\n", protocol); retc = pthread_mutex_init(&child_mutex, &mutexattr); if (retc != 0) printf("Failed to init mutex: %d\n", retc); create_other_thread(child_thread, NULL); join_threads(); return 0; #else return 1; #endif } #include "test-skeleton.c"