summaryrefslogtreecommitdiff
path: root/cesar/lib/src/dbg.c
diff options
context:
space:
mode:
authorschodet2009-03-03 17:08:04 +0000
committerschodet2009-03-03 17:08:04 +0000
commit5045eb02fa47f91ea70a7ef4c06bd4a71ca50ab8 (patch)
treea0a46067b45856e26ef7a8fefb6a2e7e0dda598c /cesar/lib/src/dbg.c
parent69af76e5f2cf84d956497a4e0f68b7f7a2383903 (diff)
* lib/dbg:
- do not recursively call fatal error callbacks. git-svn-id: svn+ssh://pessac/svn/cesar/trunk@4145 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'cesar/lib/src/dbg.c')
-rw-r--r--cesar/lib/src/dbg.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/cesar/lib/src/dbg.c b/cesar/lib/src/dbg.c
index 2de69ce081..183aac3bd5 100644
--- a/cesar/lib/src/dbg.c
+++ b/cesar/lib/src/dbg.c
@@ -75,21 +75,27 @@ dbg_vfatal (const char *fmt, va_list ap)
else
#endif
{
+ static bool in_fatal = false;
vfprintf (stderr, fmt, ap);
fputc ('\n', stderr);
- uint i;
- bool cb_called = false;
- for (i = 0; i < COUNT (dbg_fatal_cb); i++)
- if (dbg_fatal_cb[i])
+ if (!in_fatal)
+ {
+ in_fatal = true;
+ uint i;
+ bool cb_called = false;
+ for (i = 0; i < COUNT (dbg_fatal_cb); i++)
+ if (dbg_fatal_cb[i])
+ {
+ dbg_fatal_cb[i] ();
+ cb_called = true;
+ }
+ if (cb_called)
{
- dbg_fatal_cb[i] ();
- cb_called = true;
+ fputc ('>', stderr);
+ vfprintf (stderr, fmt, ap);
+ fputc ('\n', stderr);
}
- if (cb_called)
- {
- fputc ('>', stderr);
- vfprintf (stderr, fmt, ap);
- fputc ('\n', stderr);
+ in_fatal = false;
}
abort ();
}