fixes for freeBSD

This commit is contained in:
daan 2020-02-02 13:25:26 -08:00
parent 2e56bf55c4
commit 8bc20631e4
2 changed files with 6 additions and 3 deletions

View File

@ -292,11 +292,13 @@ mi_heap_t* _mi_heap_main_get(void); // statically allocated main backing hea
#if defined(MI_TLS_SLOT) #if defined(MI_TLS_SLOT)
static inline void* mi_tls_slot(size_t slot); // forward declaration static inline void* mi_tls_slot(size_t slot); // forward declaration
#elif defined(MI_TLS_PTHREAD_SLOT_OFS) #elif defined(MI_TLS_PTHREAD_SLOT_OFS)
#include <pthread.h>
static inline mi_heap_t** mi_tls_pthread_heap_slot(void) { static inline mi_heap_t** mi_tls_pthread_heap_slot(void) {
pthread_t self = pthread_self(); pthread_t self = pthread_self();
return (mi_heap_t**)((uint8_t*)self + MI_TLS_PTHREAD_SLOT_OFS); return (mi_heap_t**)((uint8_t*)self + MI_TLS_PTHREAD_SLOT_OFS);
} }
#elif defined(MI_TLS_PTHREAD) #elif defined(MI_TLS_PTHREAD)
#include <pthread.h>
extern pthread_key_t _mi_heap_default_key; extern pthread_key_t _mi_heap_default_key;
#else #else
extern mi_decl_thread mi_heap_t* _mi_heap_default; // default heap to allocate from extern mi_decl_thread mi_heap_t* _mi_heap_default; // default heap to allocate from
@ -308,7 +310,7 @@ static inline mi_heap_t* mi_get_default_heap(void) {
mi_heap_t* heap = (mi_heap_t*)mi_tls_slot(MI_TLS_SLOT); mi_heap_t* heap = (mi_heap_t*)mi_tls_slot(MI_TLS_SLOT);
return (mi_unlikely(heap == NULL) ? (mi_heap_t*)&_mi_heap_empty : heap); return (mi_unlikely(heap == NULL) ? (mi_heap_t*)&_mi_heap_empty : heap);
#elif defined(MI_TLS_PTHREAD_SLOT_OFS) #elif defined(MI_TLS_PTHREAD_SLOT_OFS)
mi_heap_t* heap = mi_tls_pthread_heap_slot(); mi_heap_t* heap = *mi_tls_pthread_heap_slot();
return (mi_unlikely(heap == NULL) ? (mi_heap_t*)&_mi_heap_empty : heap); return (mi_unlikely(heap == NULL) ? (mi_heap_t*)&_mi_heap_empty : heap);
#elif defined(MI_TLS_PTHREAD) #elif defined(MI_TLS_PTHREAD)
mi_heap_t* heap = (mi_unlikely(_mi_heap_default_key == (pthread_key_t)(-1)) ? _mi_heap_main_get() : (mi_heap_t*)pthread_getspecific(_mi_heap_default_key)); mi_heap_t* heap = (mi_unlikely(_mi_heap_default_key == (pthread_key_t)(-1)) ? _mi_heap_main_get() : (mi_heap_t*)pthread_getspecific(_mi_heap_default_key));

View File

@ -168,7 +168,7 @@ typedef struct mi_thread_data_s {
static bool _mi_heap_init(void) { static bool _mi_heap_init(void) {
if (mi_heap_is_initialized(mi_get_default_heap())) return true; if (mi_heap_is_initialized(mi_get_default_heap())) return true;
if (_mi_is_main_thread()) { if (_mi_is_main_thread()) {
mi_assert_internal(_mi_heap_main.thread_id != 0); // mi_assert_internal(_mi_heap_main.thread_id != 0); // can happen on freeBSD where alloc is called before any initialization
// the main heap is statically allocated // the main heap is statically allocated
mi_heap_main_init(); mi_heap_main_init();
_mi_heap_set_default_direct(&_mi_heap_main); _mi_heap_set_default_direct(&_mi_heap_main);
@ -358,8 +358,9 @@ void _mi_heap_set_default_direct(mi_heap_t* heap) {
mi_assert_internal(mi_fls_key != 0); mi_assert_internal(mi_fls_key != 0);
FlsSetValue(mi_fls_key, heap); FlsSetValue(mi_fls_key, heap);
#elif defined(MI_USE_PTHREADS) #elif defined(MI_USE_PTHREADS)
mi_assert_internal(_mi_heap_default_key != (pthread_key_t)(-1)); if (_mi_heap_default_key != (pthread_key_t)(-1)) { // can happen during recursive invocation on freeBSD
pthread_setspecific(_mi_heap_default_key, heap); pthread_setspecific(_mi_heap_default_key, heap);
}
#endif #endif
} }