Module Name: xsrc Committed By: maya Date: Tue Sep 24 19:47:33 UTC 2019
Modified Files: xsrc/external/mit/MesaLib/dist/src/util: u_queue.c Log Message: Apply u_queue.c patch from pkgsrc: atexit is not a good idea in shared libraries. attempt to port cpuset logic to netbsd To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 xsrc/external/mit/MesaLib/dist/src/util/u_queue.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: xsrc/external/mit/MesaLib/dist/src/util/u_queue.c diff -u xsrc/external/mit/MesaLib/dist/src/util/u_queue.c:1.3 xsrc/external/mit/MesaLib/dist/src/util/u_queue.c:1.4 --- xsrc/external/mit/MesaLib/dist/src/util/u_queue.c:1.3 Tue Sep 24 19:26:51 2019 +++ xsrc/external/mit/MesaLib/dist/src/util/u_queue.c Tue Sep 24 19:47:33 2019 @@ -48,15 +48,22 @@ static once_flag atexit_once_flag = ONCE static struct list_head queue_list; static mtx_t exit_mutex = _MTX_INITIALIZER_NP; +#define HAVE_NOATEXIT +#if defined(HAVE_NOATEXIT) static int global_init_called = 0; static void __attribute__((__destructor__)) +#else +static void +#endif atexit_handler(void) { struct util_queue *iter; +#if defined(HAVE_NOATEXIT) if (!global_init_called) return; +#endif mtx_lock(&exit_mutex); /* Wait for all queues to assert idle. */ @@ -70,7 +77,11 @@ static void global_init(void) { LIST_INITHEAD(&queue_list); +#if defined(HAVE_NOATEXIT) global_init_called = 1; +#else + atexit(atexit_handler); +#endif } static void @@ -251,12 +262,25 @@ util_queue_thread_func(void *input) /* Don't inherit the thread affinity from the parent thread. * Set the full mask. */ +#if defined(__NetBSD__) + cpuset_t *cpuset; + cpuset = cpuset_create(); + if (cpuset != NULL) { + cpuset_zero(cpuset); + for (unsigned i = 0; i < cpuset_size(cpuset); i++) + cpuset_set(i, cpuset); + + pthread_setaffinity_np(pthread_self(), cpuset_size(cpuset), cpuset); + cpuset_destroy(cpuset); + } +#else cpu_set_t cpuset; CPU_ZERO(&cpuset); for (unsigned i = 0; i < CPU_SETSIZE; i++) CPU_SET(i, &cpuset); pthread_setaffinity_np(pthread_self(), sizeof(cpuset), &cpuset); +#endif } #endif