From 8ce198a47bfe0882238524d378f6b4fa458d22ff Mon Sep 17 00:00:00 2001 From: Mike Griese Date: Sun, 4 May 2025 06:04:09 -0500 Subject: [PATCH] cmdpal: fix a leak in the extension template (#39209) There's apparently a footgun with the way we're using ComServer, which results in us leaking the extension processes when we think we've disposed them The fix unfortunately has to be on the extension side. Extensions published prior to 0.2 will need to manually fix this. closes: #39045 --- .../TemplateCmdPalExtension/Program.cs | 7 +++++-- .../Assets/template.zip | Bin 18690 -> 18703 bytes 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/modules/cmdpal/ExtensionTemplate/TemplateCmdPalExtension/TemplateCmdPalExtension/Program.cs b/src/modules/cmdpal/ExtensionTemplate/TemplateCmdPalExtension/TemplateCmdPalExtension/Program.cs index 200ac6e71e..e6d9c694ce 100644 --- a/src/modules/cmdpal/ExtensionTemplate/TemplateCmdPalExtension/TemplateCmdPalExtension/Program.cs +++ b/src/modules/cmdpal/ExtensionTemplate/TemplateCmdPalExtension/TemplateCmdPalExtension/Program.cs @@ -14,11 +14,12 @@ namespace TemplateCmdPalExtension; public class Program { [MTAThread] - public static async Task Main(string[] args) + public static void Main(string[] args) { if (args.Length > 0 && args[0] == "-RegisterProcessAsComServer") { - await using global::Shmuelie.WinRTServer.ComServer server = new(); + global::Shmuelie.WinRTServer.ComServer server = new(); + ManualResetEvent extensionDisposedEvent = new(false); // We are instantiating an extension instance once above, and returning it every time the callback in RegisterExtension below is called. @@ -31,6 +32,8 @@ public class Program // This will make the main thread wait until the event is signalled by the extension class. // Since we have single instance of the extension object, we exit as soon as it is disposed. extensionDisposedEvent.WaitOne(); + server.Stop(); + server.UnsafeDispose(); } else { diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Assets/template.zip b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Assets/template.zip index 27ff543eb6f75cc731778e6271bd5d2f345b2b92..f3994c79ef8bf3e7c03b0a872d29d0c27bdce9b6 100644 GIT binary patch delta 2671 zcmai$2UJs88pmG>7)t0(0#XE|h7dyt1OfpKEi~z&ND`XLPzDtQHOMF`qeFR81YrOb zfmJCE2r6w66;TEVZ2^On-38eJ(Q#!}bVDAq=Y-9keK{xP_x}Iyd-uEdem9xXsrCtmddezK$HN|osgR_59~qlH4LkC>1Z${KoHZrG$u@z1=bh^E?$T~6HPn;WlQb*2o_`%>sH z7C${t(oHw?zWRpR*HjZWW*wE;K6go9>v%}z@Kq%n8dGWhk@`-5*1|?|ZFPF*+R)<& zUiKJ`q?q>>-&;xMyj0L{K4~G>ZyTdqX7SS#?der?w#~I=jf3bgI7M!JZJ@H6q;e_H zhWqwXb&LIP8{)?Rq{}Vu)|ZJp2q;&r#bBSYR_ogZr@Sx`rKW?hCC9|@;br=b?{Ddh zjlCHz1e7wvV}8gA^Sow`*?0J2QPlm`^vo&z{L%q8-UxTk`N#){ay|vnCp(c8tmKag zt|t%#J=mJWnwK_~_fFwNmiPEWhvxmGb(7~oT=kqh|fAEYLO=yw?GY3wHc?eO# z)PY3tLy-Hr_zjrA?S_hhNHZ#2TtHN0;~DEpXclJ^<^@>T6%UJs>iuy&wq)h z$xZ2f$osVJ^Y#7m#}Aft|MsCrhGx=SdDGOo0-rYhhj$C23r+sA>Ju6|cfuT1UPXxQ zDx7v05X$4s+`Sy7xrOXZ+!`xZK3pnxt?JLDFl4=|FHu~+_ z??L~%f*e}4%<8W)F)FF6W8u?T@H@S+|9o|TC`r_snurRvG$hf?Ln%+)M@&Y(9i{os z&pfEO+!&Wfr7qn!~$l9!gd!7{n+1nmh^5 zkhm}55-RI_dgimClmQ20P(D;qcE_91Rao`w^vLrFl^4uY181o_nq-sKX-(vla0?w&Sd=6-#h8~S(l(sD@xP&mLrCG zh9l~+#89>9Ay@xK%(d)xuJlzJ*(KVjb7D|y#s5lAeqMCL57oyw^u)lq2MdRmcur-- zn&Uyn?C!q7oGbTUkTnWgFOu)Xm4Bv&D+b5cka-u>oznv~@NS%vIB6q^QSs$&c-rgW zh8V+!ii+!BRK;%`8GF<#sX(gFVS6A)_kUMf9sigT=3>d4UyLVdbT6zBKA%In_y3~# zH88K^;}Psx)r?!$IjpbRM-iScz)AJ0&{Wm5Uan-1)Y2%j&mi^q@9R$UzZAHy6f=Ai zCM3HxedoMG&KpwY+4q6Y8zyN?!~Jb067 z9X~6RdHQ&c3zxHITQVHzAYqe5xWC?2d#QW(DTcyPu4&M2Zock?8)X&~&E#y|&ZLwy z*#W(qn2oRSKY9w(E6~P1LcIc_3C2tz3U!cK<0NR?1(?J@o4U(10U~?NSP&`3MhZy2 zd9I*;faVd9;-h&Fq-eK*6!-M;D$us45ECIy6R{G~1dt9uN?#vHUa{Evw18C z{Df?)2=xjW8~`?tE$AVYZGF^4aOkKyZR;h{^x8IX8;9!PX6Gl8H`;}4<4|%fN{UEc zOF1TzTiB!J9E9T_6yj60@kiYn@V z+AbL9z(5~!$ z8pb~ZmkS!1YC;yt|dptoq6J?RZ3*L``cbS4`sCcl!7z1jUDTEtwR! zfK?MIi>G1WpgEZ5?25s%lSK@0YYzCbc8g6JnJ-KHKH>2Hk}`7bQ5r@3fyDApIEK); zC}6HLOJps2#WNaF{5ohM0l-$s69DSC?86Dy9ID@J@q~RVzgk}WTzW#DZX5ov)xmlf zc}K`7Ccar#4F82j1HfZ402l(KC;|zOx5N=hBsPvoieg$3a271K1)GVpjAG%ft=L3s IHqk2T-?EFVX8-^I delta 2665 zcmZ{m2~<;88pmHkKoBCEtYNjFl|`~Z8bSz50>~Ny0SXz`u#ZT@rr@xIMX4Yl@X+Ew zltng8^xWKtex%GVci)rHtg>ErE3z}z`1*`E9th|!<=Y47KGv;b9 z2|K~YbKK|yvr+k+Wd3DixA@HngNvtz=pA7?g${RYH1~UwpIJK>1|z9T&sK)2>q%+_ z0p!u;)AiQ;pg+`kDAds=?>qfm#cz~~4ToEPI>u!;wH7v*H=C<3oP8J04H>EMxSG^t z_|NsR23^FL3J<5%(f2AhI^&hE8;AH$y+1@`tWe~!8!ncrO#Rm~muA=I#7s59r~b0*huf@50Fh+B<>dG39XRdi@|+gEFAP#L37* z|9|#e(4>K*_fi!@6I6-B!; z-EZ*t1Xkhxo?aUz>-}=YcWv9 z^6D#<4v>?VH{T7zW$t;-^ei9E>_5oq zF!(;!oT449ee<5+%GAE)HN5*$#H(kq<8*eus>EwiV;KV%}!F9|oY4or=?^yVltaX9)z*;wcu z$5{gvA2&gD=Y8tnTcXzZhGtd`-;d92xssTB!(o$tadKWzCiUEB-E+LIjYU5>*<~O1 z8}{*5e$hnZ>kO!LLurfFVylQ55bgY0sc zFfh|u(>}SVt)S)Fg}kh$@9dOx+GH(Ux1uM+Pk-l= za`p$e`3s>gl`Nfzo40wtL}@t>u-pav}c9Vl^3O5O{^EHwk~DGRai~E%vT{bo~L=z2aP9)h5znNxAl$R$g7>m-~+W2 zbFX6d4(Mtp8@(Fs3Y9y|&jFCSR=GJNij+r}BKo4ZOmE6ka}CSEv$(M~#)Uzm7qP81 zE?-xBFEbG@kAO+tkw_5%(H6y`o>65H21`)b zZdlTXgC#9^ygGc;-HBXS^MF_lYd9nynA|0)z@27@Oojt1*gO&i9<`yU!uhW)WmiE$j(~9tH`}24L?Pp`Xw- z1{pb6@noNnIr6xmVqPy26~~< y0MKp&0AB(`JdT8qw6cuEb1bbQ313A=k?;{%4gqHwg(r}r@r1~)IN{L|QU3ul;ly(Q