Matthew Fuller wrote: > easy enough to just grab and run trunk instead of the release; there's > not a ton of churn between.
Done. From now on everything I say will refer to trunk, although I'm not changing the subject line for threading reasons. > So, as that local bit of code stands, I'd say the assertion _is_ wrong > for multi-Screen incarnations, so just removing it isn't exactly > wrong. Might be worth looking more into what crashes later, whether > it's in OTP or elsewhere, to see if it's strictly related or > coincidental. When I remove that assertion, I can run until I try to change workspaces. At that point I get another OTP related error: ReparentWindow: w=16000f1 type=0 InsertOwlAbove owl->pri=8 w=0x16000f1 parent_vs:(x,y)=(0,0) other_owl->pri=8 w=0x16000ed parent_vs:(x,y)=(0,0) General case OtpCheckConsistencyVS: vs:(x,y)=(0,0) XQueryTree: 49 children: [0]=1600002 [1]=400002 [2]=c00002 [3]=800002 [4]=c00004 [5]=1200002 [6]=160002e [7]=160002f [8]=1600030 [9]=1600031 [10]=1600032 [11]=1600033 [12]=1600034 [13]=1600035 [14]=1600036 [15]=1600037 [16]=1600038 [17]=1600039 [18]=160004b [19]=160004f [20]=1600053 [21]=1600057 [22]=160005b [23]=160005f [24]=1600063 [25]=1600067 [26]=160006b [27]=160006f [28]=1600087 [29]=1600098 [30]=16000a4 [31]=1600153 [32]=1600160 [33]=160016e [34]=160017c [35]=160018a [36]=1600198 [37]=16001a6 [38]=16000b1 [39]=16000b2 [40]=16000b3 [41]=1200045 [42]=140001d [43]=180001d [44]=100001d [45]=1a00002 [46]=1e0001d [47]=1c0001d [48]=200001d checking owl: pri 8 w=160004b stack=-1 title=TWM Icon Manager occupation=1 vs:(x,y)=(0,0) parent_vs:(x,y)=(0,0) Window ... checking owl: pri 8 w=16000f1 stack=30 title=TWM Icon Manager occupation=4 vs:(x,y)=(0,0) parent_vs:(x,y)=(0,0) Window search for owl in stack -> i=49 ctwm4: /usr/local/src/ctwm-trunk/otp.c:309: OtpCheckConsistencyVS: Assertion `i < nchildren && "Window was not found in stack"' failed. I don't deeply understand this, but it seems consistent with your idea that the issues come from OTP making assumptions that do not hold in the case of multiple displays. If I also remove both of these assertions at line 308: assert(i > stack && "Window not in good place in stack"); assert(i < nchildren && "Window was not found in stack"); I can then get ctwm to run with no obviously broken behavior.