Browse Source

If realloc failed, we'd lose the pointer to the exit function table.

Manuel Novoa III 21 years ago
parent
commit
5d8ce82d8c
1 changed files with 8 additions and 6 deletions
  1. 8 6
      libc/stdlib/atexit.c

+ 8 - 6
libc/stdlib/atexit.c

@@ -96,13 +96,14 @@ int atexit(aefuncp func)
 #ifdef __UCLIBC_DYNAMIC_ATEXIT__
 	/* If we are out of function table slots, make some more */
 	if (__exit_slots < __exit_count+1) {
-	    __exit_function_table=realloc(__exit_function_table, 
-		    (__exit_slots+20)*sizeof(struct exit_function));
-	    if (__exit_function_table==NULL) {
+	    efp=realloc(__exit_function_table, 
+					(__exit_slots+20)*sizeof(struct exit_function));
+	    if (efp==NULL) {
 		UNLOCK;
 		__set_errno(ENOMEM);
 		return -1;
 	    }
+		__exit_function_table = efp;
 	    __exit_slots+=20;
 	}
 #else
@@ -138,13 +139,14 @@ int on_exit(oefuncp func, void *arg)
 #ifdef __UCLIBC_DYNAMIC_ATEXIT__
 	/* If we are out of function table slots, make some more */
 	if (__exit_slots < __exit_count+1) {
-	    __exit_function_table=realloc(__exit_function_table, 
-		    (__exit_slots+20)*sizeof(struct exit_function));
-	    if (__exit_function_table==NULL) {
+	    efp=realloc(__exit_function_table, 
+					(__exit_slots+20)*sizeof(struct exit_function));
+	    if (efp==NULL) {
 		UNLOCK;
 		__set_errno(ENOMEM);
 		return -1;
 	    }
+		__exit_function_table=efp;
 	    __exit_slots+=20;
 	}
 #else