On Sun, Jun 1, 2008 at 1:31 PM, Vasily Chekalkin <[EMAIL PROTECTED]> wrote:

> interp->exceptions initialized lazily. But really_destroy_exception have
> signature with __attribute_notnull__. So we should either check this value
> before function call or change function signature to accepts NULL.

I tried this variant:

--- src/exceptions.c    (revisión: 28050)
+++ src/exceptions.c    (copia de trabajo)
@@ -772,8 +772,10 @@
 void
 destroy_exception_list(PARROT_INTERP)
 {
-    really_destroy_exception_list(interp->exceptions);
-    really_destroy_exception_list(interp->exc_free_list);
+    if (interp->exceptions)
+        really_destroy_exception_list(interp->exceptions);
+    if (interp->exc_free_list)
+        really_destroy_exception_list(interp->exc_free_list);
 }

 /*

In my platform, Ubuntu 8.04 i386, solves both this problem and #55170

The diagnostic is the same, the root of the problem is to pass null to
a parameter attributed as non null.

(Optionally add several rants about premature optimization here).

-- 
Salu2
Index: src/exceptions.c
===================================================================
--- src/exceptions.c	(revisión: 28050)
+++ src/exceptions.c	(copia de trabajo)
@@ -772,8 +772,10 @@
 void
 destroy_exception_list(PARROT_INTERP)
 {
-    really_destroy_exception_list(interp->exceptions);
-    really_destroy_exception_list(interp->exc_free_list);
+    if (interp->exceptions)
+        really_destroy_exception_list(interp->exceptions);
+    if (interp->exc_free_list)
+        really_destroy_exception_list(interp->exc_free_list);
 }
 
 /*

Reply via email to