Introduction of mi_mem_clear

This commit is contained in:
David Carlier 2019-11-18 09:49:29 +00:00
parent fd3ce5dc7d
commit e398a3d52c
3 changed files with 13 additions and 1 deletions

View file

@ -230,6 +230,7 @@ mi_decl_export bool mi_heap_visit_blocks(const mi_heap_t* heap, bool visit_all_b
mi_decl_export bool mi_is_in_heap_region(const void* p) mi_attr_noexcept; mi_decl_export bool mi_is_in_heap_region(const void* p) mi_attr_noexcept;
mi_decl_export int mi_reserve_huge_os_pages(size_t pages, double max_secs, size_t* pages_reserved) mi_attr_noexcept; mi_decl_export int mi_reserve_huge_os_pages(size_t pages, double max_secs, size_t* pages_reserved) mi_attr_noexcept;
mi_decl_export bool mi_is_redirected() mi_attr_noexcept; mi_decl_export bool mi_is_redirected() mi_attr_noexcept;
mi_decl_export void mi_mem_clear(void *p, size_t);
// ------------------------------------------------------ // ------------------------------------------------------
// Convenience // Convenience

View file

@ -130,6 +130,17 @@ bool mi_is_in_heap_region(const void* p) mi_attr_noexcept {
return false; return false;
} }
// In secure mode, volatile function pointer is used
// to discard eventual compiler optimization
void mi_mem_clear(void *p, size_t len) {
if (MI_SECURE>=1) {
void *(*volatile mem_clear)(void *, int, size_t) = memset;
(void)mem_clear(p, 0, len);
} else {
(void)memset(p, 0, len);
}
}
/* ---------------------------------------------------------------------------- /* ----------------------------------------------------------------------------
Commit from a region Commit from a region

View file

@ -248,7 +248,7 @@ static void* thread_entry(void* param) {
static void run_os_threads(size_t nthreads) { static void run_os_threads(size_t nthreads) {
pthread_t* threads = (pthread_t*)custom_malloc(nthreads*sizeof(pthread_t)); pthread_t* threads = (pthread_t*)custom_malloc(nthreads*sizeof(pthread_t));
memset(threads, 0, sizeof(pthread_t)*nthreads); mi_mem_clear(threads, sizeof(pthread_t)*nthreads);
//pthread_setconcurrency(nthreads); //pthread_setconcurrency(nthreads);
for (uintptr_t i = 0; i < nthreads; i++) { for (uintptr_t i = 0; i < nthreads; i++) {
pthread_create(&threads[i], NULL, &thread_entry, (void*)i); pthread_create(&threads[i], NULL, &thread_entry, (void*)i);