@@ -443,18 +443,17 @@ int _mi_prim_reuse(void* start, size_t size) {
443443
444444int _mi_prim_decommit (void * start , size_t size , bool * needs_recommit ) {
445445 int err = 0 ;
446- #if !MI_DEBUG && MI_SECURE <=2
447- * needs_recommit = false;
448- #if defined(__APPLE__ ) && defined(MADV_FREE_REUSABLE )
446+ #if defined(__APPLE__ ) && defined(MADV_FREE_REUSABLE )
449447 // decommit on macOS: use MADV_FREE_REUSABLE as it does immediate rss accounting (issue #1097)
450448 err = unix_madvise (start , size , MADV_FREE_REUSABLE );
451- #else
449+ if (err ) { err = unix_madvise (start , size , MADV_DONTNEED ); }
450+ #else
452451 // decommit: use MADV_DONTNEED as it decreases rss immediately (unlike MADV_FREE)
453452 err = unix_madvise (start , size , MADV_DONTNEED );
454- #endif
453+ #endif
454+ #if !MI_DEBUG && MI_SECURE <=2
455+ * needs_recommit = false;
455456 #else
456- // note: don't use MADV_FREE_REUSABLE as the range may contain protected areas
457- err = unix_madvise (start , size , MADV_DONTNEED );
458457 * needs_recommit = true;
459458 mprotect (start , size , PROT_NONE );
460459 #endif
@@ -470,10 +469,11 @@ int _mi_prim_decommit(void* start, size_t size, bool* needs_recommit) {
470469
471470int _mi_prim_reset (void * start , size_t size ) {
472471 int err = 0 ;
473- #if defined(__APPLE__ ) && defined(MADV_FREE_REUSABLE )
474- // on macOS we try to use MADV_FREE_REUSABLE as it seems the fastest
472+
473+ // on macOS can use MADV_FREE_REUSABLE (but we disable this for now as it seems slower)
474+ #if 0 && defined(__APPLE__ ) && defined(MADV_FREE_REUSABLE )
475475 err = unix_madvise (start , size , MADV_FREE_REUSABLE );
476- if (err == 0 ) return 0 ;
476+ if (err == 0 ) return 0 ;
477477 // fall through
478478 #endif
479479
0 commit comments