| 457 | } |
| 458 | |
| 459 | void _mi_heap_set_default_direct(mi_heap_t* heap) { |
| 460 | mi_assert_internal(heap != NULL); |
| 461 | #if defined(MI_TLS_SLOT) |
| 462 | mi_tls_slot_set(MI_TLS_SLOT,heap); |
| 463 | #elif defined(MI_TLS_PTHREAD_SLOT_OFS) |
| 464 | *mi_tls_pthread_heap_slot() = heap; |
| 465 | #elif defined(MI_TLS_PTHREAD) |
| 466 | // we use _mi_heap_default_key |
| 467 | #else |
| 468 | _mi_heap_default = heap; |
| 469 | #endif |
| 470 | |
| 471 | // ensure the default heap is passed to `_mi_thread_done` |
| 472 | // setting to a non-NULL value also ensures `mi_thread_done` is called. |
| 473 | #if defined(_WIN32) && defined(MI_SHARED_LIB) |
| 474 | // nothing to do as it is done in DllMain |
| 475 | #elif defined(_WIN32) && !defined(MI_SHARED_LIB) |
| 476 | mi_assert_internal(mi_fls_key != 0); |
| 477 | FlsSetValue(mi_fls_key, heap); |
| 478 | #elif defined(MI_USE_PTHREADS) |
| 479 | if (_mi_heap_default_key != (pthread_key_t)(-1)) { // can happen during recursive invocation on freeBSD |
| 480 | pthread_setspecific(_mi_heap_default_key, heap); |
| 481 | } |
| 482 | #endif |
| 483 | } |
| 484 | |
| 485 | |
| 486 | // -------------------------------------------------------- |
no test coverage detected