This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: infinite recursion in sbrk()/abort()


> Maybe _raise_r() shouldn't try to initialize the tables, but instead
> assume SIG_DFL if the table is missing?

Maybe like this?

	* libc/signal/signal.c (_raise_r): Avoid potential recursion
	from calling malloc() while in a signal.

Index: signal.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/signal/signal.c,v
retrieving revision 1.5
diff -p -U3 -r1.5 signal.c
--- signal.c	28 Oct 2005 21:21:07 -0000	1.5
+++ signal.c	30 Oct 2007 21:29:19 -0000
@@ -154,10 +154,11 @@ _DEFUN (_raise_r, (ptr, sig),
       return -1;
     }
 
-  if (ptr->_sig_func == NULL && _init_signal_r (ptr) != 0)
-    return -1;
-  
-  func = ptr->_sig_func[sig];
+  if (ptr->_sig_func == NULL)
+    func = SIG_DFL;
+  else
+    func = ptr->_sig_func[sig];
+
   if (func == SIG_DFL)
     return _kill_r (ptr, _getpid_r (ptr), sig);
   else if (func == SIG_IGN)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]