-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsched_thread.c
More file actions
52 lines (32 loc) · 846 Bytes
/
Copy pathsched_thread.c
File metadata and controls
52 lines (32 loc) · 846 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "utimer_private.h"
#include <stddef.h>
#include <stdlib.h>
#include <threads.h>
static thread_local utimer_scheduler_t *thread_scheduler = NULL;
static void scheduler_destructor(void *ud)
{
if (thread_scheduler != NULL)
free(thread_scheduler);
thread_scheduler = NULL;
}
utimer_scheduler_t* utimer_scheduler_instance(void)
{
if (thread_scheduler != NULL)
return thread_scheduler;
utimer_scheduler_t *scheduler = calloc(sizeof(utimer_scheduler_t), 1);
if (scheduler == NULL)
goto error_alloc;
tss_t key;
int r = tss_create(&key, scheduler_destructor);
if (r != thrd_success)
goto error_tss;
r = tss_set(key, scheduler);
if (r != thrd_success)
goto error_tss;
thread_scheduler = scheduler;
return thread_scheduler;
error_tss:
free(scheduler);
error_alloc:
return NULL;
}