Fixing broken scripts with GC

Posted on December 23rd 2002

Scripts can crash irssi too easily, fixing that properly would require major changes. But while I was again getting annoyed at those crashes, without any easy way to figure out why and where the heap corruption happened, I started thinking and figured out that the corrupted accesses happen only through one function, when accessing perl object’s _irssi pointer. So, if we only could check that address to be valid.. And then I remembered GCs could easily do that.

So, get yourself a Boehm’s GC (apt-get install libgc6-dev), GLIB2 and CVS irssi. Make sure configure says that GC is enabled, then /SET perl_memory_check_level can be used to control how well irssi checks for valid memory references. Default is 1 which should prevent at least some crashes, 2 is more slower (it runs GC before each check) but notices most invalid references. Whenever error occurs, you’ll get a nice error message about accessing free’d memory, with a line number to script and everything.