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.