From 6c43ae2bde1c9c0843c77c87feb316e200ac1deb Mon Sep 17 00:00:00 2001 From: daan Date: Wed, 4 Sep 2019 12:00:41 -0700 Subject: [PATCH] add later thread-done invokation; add mi_is_redirected call --- bin/mimalloc-redirect.dll | Bin 43520 -> 43520 bytes bin/mimalloc-redirect32.dll | Bin 31232 -> 31744 bytes include/mimalloc.h | 2 ++ src/init.c | 20 ++++++++++++++++---- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/bin/mimalloc-redirect.dll b/bin/mimalloc-redirect.dll index 428ffbab718b79502f475baab1539689ea92f00b..45e0fb4843752d1ecaa1cac4c18a485e4caabf56 100644 GIT binary patch delta 3053 zcmbtWeN+_J6@N3Z?k?=IeC>*eu)r*=BDz5MQiw|fI*A~g1TEEAz%07P6eu5!Q4^qw zk!&^*pJ|VYwU8>b+9bqj3F(RH#u$SH6V#AHPfiu>X|sfolC;S&X+7KDn;kI6e>>;g z&-c6c-FM%6Gt>4F-}VuIuz(xyDlDma|KFBJPV~*vePPFYQ)K&iUpnOLK|Q^RvOLi% z$Z}&}K=#S@1KS^Vu~>4)<0v7-xnE7H)D2yqEaI$P-&Se+w-IuSBcz+wa8cYiZQ<6? zp1!z{WzDran-PC;4ZXpoa4%CWpUSyt2Dp>{2>c^G=vGK~4&NYsJlH%I2WyD9x3CT>X^t7h97NpV zC89@P0g&OXV6Ma45}f6oQi~o{k@Ti&oLl?o?|}*@q$vl!O-ETSoglg^1hW`)Npug3 zZetlBh5_vXUAX90*QR-^ zer*DmPDi!BEIIPKK*f#xR6b_ke}u*8pMuvgP$6gzL~BsyPMCo*>zL+IRRv(xuvnXD zO-3~Jh8&I^yXp6{8Zjjpn_Lv#rGnjOlIlYL!Es}By?!}2L_73m?yA(Qf0yUl>7(Jj z+!s<*#CT9t#B=iWk-wg8|GAyWy^4k#uh4K)z0RX&<3qjR^!9;*GSyWYBF^oa>pBO*A^+ zpiftv7RXF`JvN$ob+>SqSWRC;&ejw%q&U5y^b1p(jw+@*fLTbpW8!t|6zA%I(?lm? z7U-fBXXy8lAA|&^I1h;_Omg_MigUl>l)4veQ^#6yA+{C`26Lk4u+WCR#d$5lZS?(^ zCMMdsMRZG|gF8c|#FE%t9O*lu-A#c0ghnPct=-nnf>n9&uq|~!FHrPK=%S)mL$6SD zm-rrzCMHE-1&h$1Ek!;D9Zj;W&lEkz7zV_F5PjnNg|<aB_!*Dub);4F==1lN5~uOLi;?|5VH52^_>y<5%+#>MVVu49F1hH zcu82t1=BBuVm{wUb1hHve~zZ_SpLX=7DacZEaSaV^km9C{E;a7&y**5E{fKtp5nzw z8fQ&2CPw1Yc}j)6QV(uJ*5#}Ve&Z4PkhPIN96?8|*YG;*Upzq_YE7#v&@dF=;5XLe zTA>+cG{a1uP)({)Dtallpdia%0yj)#0hMwu{l>fR2>6)o0B)c|zKcw&WLh56tnAH^ zXV`aI!N6H6w8E<~?8CK_<8X83J(piKFzgx@ZWmFIjWma`G#J9Y7CS`^^V+d5%xhQL zuVDr<-_8PKHj7+DV4LJ%q+E78r&Z25i^-d{^7ItyU0SYw;-~0T{}?r;=khDZr1JC;Ubna&zUMFd{gWy`-IP&+Qxi?wY!+U) zO#5uBY~R#jeE1T&>oI-@ovp;`>w*JE6DM$~{3^vZOfz85C2GnrTRxrx?f?+q1EXO8 z8wa=!$Z>{@xFl`Lc#q@veMp6@-Msok+LN`#_%be6i@Kki{0uF}VjZ2T7uuzmySljS zzdeE|^+k4+ivzDuGrl52zUM~*J8zxpWi7XomT=5*k)eGf^lEmJwud2D=V*;80qcvQ z_MCWLJwmH<;+&!@uqKD^*86g)saWWPic|Cr!wE;G>=^PTDKB#K)E;;X=3?Kz9lLTa z_Sryel8a8{L|e^s;EvniyI0dR`Jw zngzjYR#uixy}3<%<}l69OIACP!>1pnRe6i~zh0nE=dD}TjPH}*@-vz5l=&{1?~(bF zGH;Xl&%q@wKRg2cQqwQ_+ywmMY{sS#cK?x?6xV>tn1`_6A1S%i!i8^G`)Nvx9*);e1@vx{6EP=gkR0@qF?dL2t{7(EWs6f%6 zXFzoz)5YSQd;?|KP_k=rOw9H+v}VqY@1itHx@aajkQfpM2a|eg_FX%zta8> D*dfEO delta 2708 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 diff --git a/include/mimalloc.h b/include/mimalloc.h index cd8c33a5..6610bce6 100644 --- a/include/mimalloc.h +++ b/include/mimalloc.h @@ -226,8 +226,10 @@ typedef bool (mi_cdecl mi_block_visit_fun)(const mi_heap_t* heap, const mi_heap_ mi_decl_export bool mi_heap_visit_blocks(const mi_heap_t* heap, bool visit_all_blocks, mi_block_visit_fun* visitor, void* arg); +// Experimental 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) mi_attr_noexcept; +mi_decl_export bool mi_is_redirected() mi_attr_noexcept; // ------------------------------------------------------ // Convenience diff --git a/src/init.c b/src/init.c index cb5901aa..863214cb 100644 --- a/src/init.c +++ b/src/init.c @@ -388,14 +388,26 @@ bool _mi_preloading() { return os_preloading; } +bool mi_is_redirected() mi_attr_noexcept { + return mi_redirected; +} + // Communicate with the redirection module on Windows #if defined(_WIN32) && defined(MI_SHARED_LIB) #ifdef __cplusplus extern "C" { #endif -mi_decl_export void _mi_redirect_init() { - // called on redirection - mi_redirected = true; +mi_decl_export void _mi_redirect_entry(DWORD reason) { + // called on redirection; careful as this may be called before DllMain + if (reason == DLL_PROCESS_ATTACH) { + mi_redirected = true; + } + else if (reason == DLL_PROCESS_DETACH) { + mi_redirected = false; + } + else if (reason == DLL_THREAD_DETACH) { + mi_thread_done(); + } } __declspec(dllimport) bool mi_allocator_init(const char** message); __declspec(dllimport) void mi_allocator_done(); @@ -493,7 +505,7 @@ static void mi_process_done(void) { mi_process_load(); } else if (reason==DLL_THREAD_DETACH) { - mi_thread_done(); + if (!mi_is_redirected()) mi_thread_done(); } return TRUE; }