Rio dies when user selects last hidden window in button3menu if the window gets deleted underneath (say, the last process exits). How to reproduce: • draw a new window • run: echo hide >/dev/wctl; sleep 5; exit • within 5 seconds, depress and hold mouse button 3 for at least 5 seconds • select the just-hidden window — rio dies in: acid: lstk() wunhide(h=0x0)+0x30 /sys/src/cmd/rio/rio.c:1100 w=0x710d0 i=0x0 unhide(h=0x6)+0x27 /sys/src/cmd/rio/rio.c:1130 button3menu()+0x97 /sys/src/cmd/rio/rio.c:687 mousethread()+0x2c4 /sys/src/cmd/rio/rio.c:589 sending=0x0 scrolling=0x0 moving=0x0 winput=0x0 xy=0x298 inside=0x0 tmp=0xfefefefe w=0x0 oin=0xfefefefe band=0xfefefefe r=0xfefefefe launcher386(arg=0x0,f=0x1f0c)+0x10 /sys/src/libthread/386.c:10 0xfefefefe ?file?:0 What's fixed: This patch makes /sys/src/cmd/rio/wind.c:/^wclosewin to zero out the just-freed space in hidden[]. - Iaroslav Reference: /n/sources/patch/applied/rio-b3menu-hidden-dies Date: Wed Feb 2 17:28:31 CET 2011 Signed-off-by: yarikos@gmail.com --- /sys/src/cmd/rio/wind.c Wed Feb 2 17:12:15 2011 +++ /sys/src/cmd/rio/wind.c Wed Feb 2 17:12:08 2011 @@ -1300,6 +1300,7 @@ if(hidden[i] == w){ --nhidden; memmove(hidden+i, hidden+i+1, (nhidden-i)*sizeof(hidden[0])); + hidden[nhidden] = nil; break; } for(i=0; i