clsync
Loading...
Searching...
No Matches
pthreadex.c
Go to the documentation of this file.
1/*
2 clsync - file tree sync utility based on inotify/kqueue
3
4 Copyright (C) 2013-2014 Dmitry Yu Okunev <dyokunev@ut.mephi.ru> 0x8E30679C
5
6 This program is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#include <string.h>
21#include <pthread.h>
22#include "pthreadex.h"
23#include "malloc.h"
24
25int pthread_mutex_init_shared ( pthread_mutex_t **mutex_p )
26{
27 static pthread_mutex_t mutex_initial = PTHREAD_MUTEX_INITIALIZER;
28 *mutex_p = shm_malloc_try ( sizeof ( **mutex_p ) );
29 memcpy ( *mutex_p, &mutex_initial, sizeof ( mutex_initial ) );
30 pthread_mutexattr_t attr;
31 pthread_mutexattr_init ( &attr );
32 pthread_mutexattr_setpshared ( &attr, PTHREAD_PROCESS_SHARED );
33 return pthread_mutex_init ( *mutex_p, &attr );
34}
35
36int pthread_mutex_destroy_shared ( pthread_mutex_t *mutex_p )
37{
38 int rc;
39 rc = pthread_mutex_destroy ( mutex_p );
40 shm_free ( mutex_p );
41 return rc;
42}
43
44int pthread_cond_init_shared ( pthread_cond_t **cond_p )
45{
46 static pthread_cond_t cond_initial = PTHREAD_COND_INITIALIZER;
47 *cond_p = shm_malloc ( sizeof ( **cond_p ) );
48 memcpy ( *cond_p, &cond_initial, sizeof ( cond_initial ) );
49 pthread_condattr_t attr;
50 pthread_condattr_init ( &attr );
51 pthread_condattr_setpshared ( &attr, PTHREAD_PROCESS_SHARED );
52 return pthread_cond_init ( *cond_p, &attr );
53}
54
55int pthread_cond_destroy_shared ( pthread_cond_t *cond_p )
56{
57 int rc;
58 rc = pthread_cond_destroy ( cond_p );
59 shm_free ( cond_p );
60 return rc;
61}
62
63int pthread_mutex_reltimedlock ( pthread_mutex_t *mutex_p, long tv_sec, long tv_nsec )
64{
65 struct timespec abs_time;
66
67 if ( clock_gettime ( CLOCK_REALTIME, &abs_time ) )
68 return -1;
69
70 abs_time.tv_sec += tv_sec;
71 abs_time.tv_nsec += tv_nsec;
72
73 if ( abs_time.tv_nsec > 1000 * 1000 * 1000 ) {
74 abs_time.tv_sec++;
75 abs_time.tv_nsec -= 1000 * 1000 * 1000;
76 }
77
78 return pthread_mutex_timedlock ( mutex_p, &abs_time );
79}
80
void shm_free(void *ptr)
Definition malloc.c:251
void * shm_malloc(size_t size)
Definition malloc.c:228
void * shm_malloc_try(size_t size)
Definition malloc.c:196
int pthread_mutex_init_shared(pthread_mutex_t **mutex_p)
Definition pthreadex.c:25
int pthread_cond_destroy_shared(pthread_cond_t *cond_p)
Definition pthreadex.c:55
int pthread_mutex_reltimedlock(pthread_mutex_t *mutex_p, long tv_sec, long tv_nsec)
Definition pthreadex.c:63
int pthread_mutex_destroy_shared(pthread_mutex_t *mutex_p)
Definition pthreadex.c:36
int pthread_cond_init_shared(pthread_cond_t **cond_p)
Definition pthreadex.c:44