blob: 171cef41e8305173d00c3aea7a0377a7d614aed2 (
plain) (
blame)
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 | #include "pthread_impl.h"
int pthread_setspecific(pthread_key_t k, const void *x)
{
	struct pthread *self = pthread_self();
	/* Handle the case of the main thread */
	if (!self->tsd) {
		if (!x) return 0;
		if (!(self->tsd = calloc(sizeof(void *), PTHREAD_KEYS_MAX)))
			return ENOMEM;
	}
	/* Avoid unnecessary COW */
	if (self->tsd[k] != x) {
		self->tsd[k] = (void *)x;
		self->tsd_used = 1;
	}
	return 0;
}
 |