From: "Chris Jones" Newsgroups: comp.os.msdos.djgpp Subject: Possible bug in Allegro 3.1 Date: Sat, 9 Jan 1999 15:49:53 -0000 Organization: Customer of Planet Online Lines: 36 Message-ID: <77ag71$s0j$1@news5.svr.pol.co.uk> NNTP-Posting-Host: modem-55.zoloft.dialup.pol.co.uk X-Trace: news5.svr.pol.co.uk 915981345 28691 62.136.95.55 (10 Jan 1999 15:15:45 GMT) NNTP-Posting-Date: 10 Jan 1999 15:15:45 GMT X-Complaints-To: abuse AT theplanet DOT net X-Newsreader: Microsoft Outlook Express 4.72.3110.5 X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3110.3 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Having just upgraded from Allegro 3.0 to 3.1, I re-compiled a program which uses it. The program was still a bit buggy - it used to occasionally cause SIGSEGVs and the like. Since upgrading to 3.1, it now just crashes with 'Shutting down Allegro' repeatedly printing on the screen. I investigated this, and found that my program was calling allegro_init() twice by accident. This was not a problem with Allegro 3.0, but it seems that 3.1's allegro_init() saves the old signal handlers to call when a fault occurs (which, of course, on the second call to allegro_init() are its own handlers). Therefore on a SIGSEGV it calls its own handler recursively, and never exits. For example, compiling this program under 3.1 will hang the system: int main() { int zero,cause_fault; allegro_init(); allegro_init(); zero=0; cause_fault = 5 / zero; } The strange thing is, that Allegro maintains the _allegro_count variable with how many times allegro_init() has been called. So, a simple fix for this would be to only call the signal-setting calls in allegro_init() if _allegro_count is 0. I know this is a very minor bug, and that people shouldn't call allegro_init() twice anyway, but it can be frustrating to find what's wrong with the program. Chris Jones ------------------------------- Tip of the year: "Friends are just enemies who don't have the guts to kill you"