mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 05:03:43 +01:00
Remove workaround code for systems where free(NULL) is busted.
Add an autoconf test to make sure we won't regret it. Closes ticket 24484.
This commit is contained in:
parent
7a74b3663f
commit
4dc228e35b
4
changes/bug24484
Normal file
4
changes/bug24484
Normal file
@ -0,0 +1,4 @@
|
||||
o Code simplification and refactoring:
|
||||
- Since Tor requires C99, remove our old workaround code for libc
|
||||
implementations where free(NULL) doesn't work. Closes ticket 24484.
|
||||
|
15
configure.ac
15
configure.ac
@ -615,6 +615,21 @@ fi
|
||||
AM_CONDITIONAL(BUILD_READPASSPHRASE_C,
|
||||
test "x$ac_cv_func_readpassphrase" = "xno" && test "$bwin32" = "false")
|
||||
|
||||
AC_MSG_CHECKING([whether free(NULL) works])
|
||||
AC_RUN_IFELSE([AC_LANG_PROGRAM([
|
||||
#include <stdlib.h>
|
||||
], [
|
||||
char *p = NULL;
|
||||
free(p);
|
||||
])],
|
||||
[free_null_ok=true; AC_MSG_RESULT(yes)],
|
||||
[free_null_ok=false; AC_MSG_RESULT(no)],
|
||||
[free_null_ok=cross; AC_MSG_RESULT(cross)])
|
||||
|
||||
if test "$free_null_ok" = "false"; then
|
||||
AC_MSG_ERROR([Your libc implementation doesn't allow free(NULL), as required by C99.])
|
||||
fi
|
||||
|
||||
dnl ------------------------------------------------------
|
||||
dnl Where do you live, libevent? And how do we call you?
|
||||
|
||||
|
@ -73,9 +73,9 @@ extern int dmalloc_free(const char *file, const int line, void *pnt,
|
||||
} \
|
||||
STMT_END
|
||||
#else /* !(defined(USE_DMALLOC)) */
|
||||
/** Release memory allocated by tor_malloc, tor_realloc, tor_strdup, etc.
|
||||
* Unlike the free() function, tor_free() will still work on NULL pointers,
|
||||
* and it sets the pointer value to NULL after freeing it.
|
||||
/** Release memory allocated by tor_malloc, tor_realloc, tor_strdup,
|
||||
* etc. Unlike the free() function, the tor_free() macro sets the
|
||||
* pointer value to NULL after freeing it.
|
||||
*
|
||||
* This is a macro. If you need a function pointer to release memory from
|
||||
* tor_malloc(), use tor_free_().
|
||||
@ -88,17 +88,13 @@ extern int dmalloc_free(const char *file, const int line, void *pnt,
|
||||
#ifdef __GNUC__
|
||||
#define tor_free(p) STMT_BEGIN \
|
||||
typeof(&(p)) tor_free__tmpvar = &(p); \
|
||||
if (PREDICT_LIKELY((*tor_free__tmpvar)!=NULL)) { \
|
||||
raw_free(*tor_free__tmpvar); \
|
||||
*tor_free__tmpvar=NULL; \
|
||||
} \
|
||||
raw_free(*tor_free__tmpvar); \
|
||||
*tor_free__tmpvar=NULL; \
|
||||
STMT_END
|
||||
#else
|
||||
#define tor_free(p) STMT_BEGIN \
|
||||
if (PREDICT_LIKELY((p)!=NULL)) { \
|
||||
raw_free(p); \
|
||||
(p)=NULL; \
|
||||
} \
|
||||
raw_free(p); \
|
||||
(p)=NULL; \
|
||||
STMT_END
|
||||
#endif
|
||||
#endif /* defined(USE_DMALLOC) */
|
||||
|
Loading…
Reference in New Issue
Block a user