********> bugfix.9 Author: Bill Ross Date: 11/23/97 Programs: xleap Severity: crash Description: xleap crashes, often in addIons, because of an error in the graphics update code: if there is a single object on the update queue, and this object is immediately added again, the queue is corrupted. This happens when copying a single-atom residue such as a monoatomic ion: the "head" and "tail" point to the same atom, and this atom is added to the queue twice. Workaround: Use tleap for operations that crash xleap. Fix: Make the following change to displayer.c: ------------------------------------------------------------------------- *** OLD displayer.c --- NEW displayer.c *************** *** 269,278 /* accumulate the updates then accumulate and continue */ if ( GiDisplayerAccumulateUpdates != 0 ) { ! if ( dDisp->dNext == NULL ) { ! dDisp->dNext = SdDisplayerAccumulateList; ! SdDisplayerAccumulateList = dDisp; ! } RETURNV; } /* If the DISPLAYER is insensitive then */ --- 269,282 ----- /* accumulate the updates then accumulate and continue */ if ( GiDisplayerAccumulateUpdates != 0 ) { ! DISPLAYER dTmp; ! for (dTmp=SdDisplayerAccumulateList; dTmp; dTmp=dTmp->dNext) ! if ( dTmp == dDisp ) ! RETURNV; ! if ( dDisp->dNext != NULL ) ! DFATAL(("bad dDisp->dNext pointer\n")); ! dDisp->dNext = SdDisplayerAccumulateList; ! SdDisplayerAccumulateList = dDisp; RETURNV; } /* If the DISPLAYER is insensitive then */ -------------------------------------------------------------------------