Better standardize around assertions (#12539)

We use the C standard assert() in various places in the codebase, which requires NDEBUG to be undefined. We introduced the redisassert.h file in order to allow low level files to access the assert that maps to serverPanic, but this was only applied tactically and is not available broadly.

This PR removes all usage of the standard library asserts and replaces them with an assert that maps to serverPanic. It makes us immune to accidentally setting the NDEBUG flag preventing assertions. I also marked marked the server asserts as "likely" to not execute. I spot checked various points in the code, and it didn't change the code layout on my x86 mac, but it is more consistent with redisassert.h and seems more correct overall.
This commit is contained in:
Madelyn Olson 2023-10-02 18:58:44 -07:00 committed by GitHub
parent 9d31768cbb
commit 31c3172d9b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 6 additions and 14 deletions

View File

@ -36,7 +36,6 @@
#include "server.h"
#include "cluster.h"
#include <time.h>
#include <assert.h>
#include <stddef.h>
#ifdef HAVE_DEFRAG

View File

@ -30,7 +30,6 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <limits.h>
#include <errno.h>
#include <termios.h>
@ -39,6 +38,7 @@
#include <stropts.h>
#endif
#include "config.h"
#include "redisassert.h"
#if (ULONG_MAX == 4294967295UL)
#define MEMTEST_32BIT

View File

@ -3,10 +3,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#undef NDEBUG
#include <assert.h>
#include "redisassert.h"
/* The function pointer for clock retrieval. */
monotime (*getMonotonicUs)(void) = NULL;

View File

@ -32,11 +32,11 @@
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <stdio.h>
#include <errno.h>
#include <math.h>
#include "rax.h"
#include "redisassert.h"
#ifndef RAX_MALLOC_INCLUDE
#define RAX_MALLOC_INCLUDE "rax_malloc.h"

View File

@ -34,8 +34,8 @@
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <assert.h>
#include <limits.h>
#include "redisassert.h"
#include "sds.h"
#include "sdsalloc.h"
#include "util.h"

View File

@ -45,7 +45,6 @@
#include <signal.h>
#include <sys/wait.h>
#include <errno.h>
#include <assert.h>
#include <ctype.h>
#include <stdarg.h>
#include <arpa/inet.h>

View File

@ -37,7 +37,6 @@
#include "atomicvar.h"
#include "commands.h"
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
@ -669,8 +668,8 @@ typedef enum {
#define run_with_period(_ms_) if (((_ms_) <= 1000/server.hz) || !(server.cronloops%((_ms_)/(1000/server.hz))))
/* We can print the stacktrace, so our assert is defined this way: */
#define serverAssertWithInfo(_c,_o,_e) ((_e)?(void)0 : (_serverAssertWithInfo(_c,_o,#_e,__FILE__,__LINE__),redis_unreachable()))
#define serverAssert(_e) ((_e)?(void)0 : (_serverAssert(#_e,__FILE__,__LINE__),redis_unreachable()))
#define serverAssertWithInfo(_c,_o,_e) (likely(_e)?(void)0 : (_serverAssertWithInfo(_c,_o,#_e,__FILE__,__LINE__),redis_unreachable()))
#define serverAssert(_e) (likely(_e)?(void)0 : (_serverAssert(#_e,__FILE__,__LINE__),redis_unreachable()))
#define serverPanic(...) _serverPanic(__FILE__,__LINE__,__VA_ARGS__),redis_unreachable()
/* latency histogram per command init settings */

View File

@ -39,7 +39,6 @@
the function in the new form (returning an uint64_t) using just the
relevant test vector.
*/
#include <assert.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>

View File

@ -36,7 +36,6 @@
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <assert.h>
#ifdef __linux__
#include <sys/mman.h>