Skip to content

Commit

Permalink
Fix possible race confition when adding, then removing remote config …
Browse files Browse the repository at this point in the history
…services

Signed-off-by: Bob Weinand <[email protected]>
  • Loading branch information
bwoebi committed Feb 14, 2025
1 parent 8154bb8 commit 3db5232
Show file tree
Hide file tree
Showing 11 changed files with 215 additions and 118 deletions.
4 changes: 4 additions & 0 deletions .circleci/continue_config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5319,6 +5319,10 @@ workflows:
- test_c_disabled
- test_internal_api_randomized
- test_opcache
exclude:
# apparently for no discernible reason, on PHP 8.1 valgrind thinks some extensions are loaded, but they aren't. We anyway test sasn, so good enough, I guess.
- php_major_minor: '8.1'
make_target: test_c2php

- test:
requires: [ 'Prepare Code' ]
Expand Down
3 changes: 3 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ install_appsec:
install_all: install install_ini

run_tests: $(TEST_FILES) $(TEST_STUB_FILES) $(BUILD_DIR)/run-tests.php
$(ALL_TEST_ENV_OVERRIDE) $(TESTS)
$(ALL_TEST_ENV_OVERRIDE) $(RUN_TESTS_CMD) $(TESTS)

test_c: $(SO_FILE) $(TEST_FILES) $(TEST_STUB_FILES) $(BUILD_DIR)/run-tests.php
$(if $(ASAN), USE_ZEND_ALLOC=0 USE_TRACKED_ALLOC=1 LSAN_OPTIONS=fast_unwind_on_malloc=0$${LSAN_OPTIONS:+$(,)$${LSAN_OPTIONS}}) $(ALL_TEST_ENV_OVERRIDE) $(RUN_TESTS_CMD) -d extension=$(SO_FILE) $(BUILD_DIR)/$(subst $(BUILD_DIR_NAME)/,,$(TESTS))
Expand Down
171 changes: 83 additions & 88 deletions components-rs/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -870,7 +870,6 @@ typedef enum ddog_crasht_BuildIdType {
DDOG_CRASHT_BUILD_ID_TYPE_GNU,
DDOG_CRASHT_BUILD_ID_TYPE_GO,
DDOG_CRASHT_BUILD_ID_TYPE_PDB,
DDOG_CRASHT_BUILD_ID_TYPE_PE,
DDOG_CRASHT_BUILD_ID_TYPE_SHA1,
} ddog_crasht_BuildIdType;

Expand All @@ -888,7 +887,7 @@ typedef enum ddog_crasht_ErrorKind {
typedef enum ddog_crasht_FileType {
DDOG_CRASHT_FILE_TYPE_APK,
DDOG_CRASHT_FILE_TYPE_ELF,
DDOG_CRASHT_FILE_TYPE_PDB,
DDOG_CRASHT_FILE_TYPE_PE,
} ddog_crasht_FileType;

/**
Expand Down Expand Up @@ -943,10 +942,37 @@ typedef enum ddog_crasht_SiCodes {
* See https://man7.org/linux/man-pages/man7/signal.7.html
*/
typedef enum ddog_crasht_SignalNames {
DDOG_CRASHT_SIGNAL_NAMES_SIGHUP,
DDOG_CRASHT_SIGNAL_NAMES_SIGINT,
DDOG_CRASHT_SIGNAL_NAMES_SIGQUIT,
DDOG_CRASHT_SIGNAL_NAMES_SIGILL,
DDOG_CRASHT_SIGNAL_NAMES_SIGTRAP,
DDOG_CRASHT_SIGNAL_NAMES_SIGABRT,
DDOG_CRASHT_SIGNAL_NAMES_SIGBUS,
DDOG_CRASHT_SIGNAL_NAMES_SIGFPE,
DDOG_CRASHT_SIGNAL_NAMES_SIGKILL,
DDOG_CRASHT_SIGNAL_NAMES_SIGUSR1,
DDOG_CRASHT_SIGNAL_NAMES_SIGSEGV,
DDOG_CRASHT_SIGNAL_NAMES_SIGUSR2,
DDOG_CRASHT_SIGNAL_NAMES_SIGPIPE,
DDOG_CRASHT_SIGNAL_NAMES_SIGALRM,
DDOG_CRASHT_SIGNAL_NAMES_SIGTERM,
DDOG_CRASHT_SIGNAL_NAMES_SIGCHLD,
DDOG_CRASHT_SIGNAL_NAMES_SIGCONT,
DDOG_CRASHT_SIGNAL_NAMES_SIGSTOP,
DDOG_CRASHT_SIGNAL_NAMES_SIGTSTP,
DDOG_CRASHT_SIGNAL_NAMES_SIGTTIN,
DDOG_CRASHT_SIGNAL_NAMES_SIGTTOU,
DDOG_CRASHT_SIGNAL_NAMES_SIGURG,
DDOG_CRASHT_SIGNAL_NAMES_SIGXCPU,
DDOG_CRASHT_SIGNAL_NAMES_SIGXFSZ,
DDOG_CRASHT_SIGNAL_NAMES_SIGVTALRM,
DDOG_CRASHT_SIGNAL_NAMES_SIGPROF,
DDOG_CRASHT_SIGNAL_NAMES_SIGWINCH,
DDOG_CRASHT_SIGNAL_NAMES_SIGIO,
DDOG_CRASHT_SIGNAL_NAMES_SIGSYS,
DDOG_CRASHT_SIGNAL_NAMES_SIGEMT,
DDOG_CRASHT_SIGNAL_NAMES_SIGINFO,
DDOG_CRASHT_SIGNAL_NAMES_UNKNOWN,
} ddog_crasht_SignalNames;

Expand Down Expand Up @@ -1014,6 +1040,20 @@ typedef struct ddog_crasht_Slice_CharSlice {
uintptr_t len;
} ddog_crasht_Slice_CharSlice;

typedef struct ddog_crasht_Slice_I32 {
/**
* Should be non-null and suitably aligned for the underlying type. It is
* allowed but not recommended for the pointer to be null when the len is
* zero.
*/
const int32_t *ptr;
/**
* The number of elements (not bytes) that `.ptr` points to. Must be less
* than or equal to [isize::MAX].
*/
uintptr_t len;
} ddog_crasht_Slice_I32;

typedef struct ddog_crasht_Config {
struct ddog_crasht_Slice_CharSlice additional_files;
bool create_alt_stack;
Expand All @@ -1024,6 +1064,11 @@ typedef struct ddog_crasht_Config {
*/
const struct ddog_Endpoint *endpoint;
enum ddog_crasht_StacktraceCollection resolve_frames;
/**
* The set of signals we should be registered for.
* If empty, use the default set.
*/
struct ddog_crasht_Slice_I32 signals;
/**
* Timeout in milliseconds before the signal handler starts tearing things down to return.
* This is given as a uint32_t, but the actual timeout needs to fit inside of an i32 (max
Expand Down Expand Up @@ -1079,6 +1124,20 @@ typedef struct ddog_crasht_Metadata {
const struct ddog_Vec_Tag *tags;
} ddog_crasht_Metadata;

typedef struct ddog_crasht_Slice_CInt {
/**
* Should be non-null and suitably aligned for the underlying type. It is
* allowed but not recommended for the pointer to be null when the len is
* zero.
*/
const int *ptr;
/**
* The number of elements (not bytes) that `.ptr` points to. Must be less
* than or equal to [isize::MAX].
*/
uintptr_t len;
} ddog_crasht_Slice_CInt;

/**
* A generic result type for when an operation may fail,
* or may return <T> in case of success.
Expand Down Expand Up @@ -1116,38 +1175,13 @@ typedef struct ddog_crasht_Handle_CrashInfoBuilder {
struct ddog_crasht_CrashInfoBuilder *inner;
} ddog_crasht_Handle_CrashInfoBuilder;

/**
* A generic result type for when an operation may fail,
* or may return <T> in case of success.
*/
typedef enum ddog_crasht_Result_HandleCrashInfoBuilder_Tag {
DDOG_CRASHT_RESULT_HANDLE_CRASH_INFO_BUILDER_OK_HANDLE_CRASH_INFO_BUILDER,
DDOG_CRASHT_RESULT_HANDLE_CRASH_INFO_BUILDER_ERR_HANDLE_CRASH_INFO_BUILDER,
} ddog_crasht_Result_HandleCrashInfoBuilder_Tag;

typedef struct ddog_crasht_Result_HandleCrashInfoBuilder {
ddog_crasht_Result_HandleCrashInfoBuilder_Tag tag;
union {
struct {
struct ddog_crasht_Handle_CrashInfoBuilder ok;
};
struct {
struct ddog_Error err;
};
};
} ddog_crasht_Result_HandleCrashInfoBuilder;

/**
* A generic result type for when an operation may fail,
* or may return <T> in case of success.
*/
typedef enum ddog_crasht_Result_HandleCrashInfo_Tag {
DDOG_CRASHT_RESULT_HANDLE_CRASH_INFO_OK_HANDLE_CRASH_INFO,
DDOG_CRASHT_RESULT_HANDLE_CRASH_INFO_ERR_HANDLE_CRASH_INFO,
} ddog_crasht_Result_HandleCrashInfo_Tag;
typedef enum ddog_crasht_CrashInfo_NewResult_Tag {
DDOG_CRASHT_CRASH_INFO_NEW_RESULT_OK,
DDOG_CRASHT_CRASH_INFO_NEW_RESULT_ERR,
} ddog_crasht_CrashInfo_NewResult_Tag;

typedef struct ddog_crasht_Result_HandleCrashInfo {
ddog_crasht_Result_HandleCrashInfo_Tag tag;
typedef struct ddog_crasht_CrashInfo_NewResult {
ddog_crasht_CrashInfo_NewResult_Tag tag;
union {
struct {
struct ddog_crasht_Handle_CrashInfo ok;
Expand All @@ -1156,7 +1190,7 @@ typedef struct ddog_crasht_Result_HandleCrashInfo {
struct ddog_Error err;
};
};
} ddog_crasht_Result_HandleCrashInfo;
} ddog_crasht_CrashInfo_NewResult;

typedef struct ddog_crasht_OsInfo {
ddog_CharSlice architecture;
Expand Down Expand Up @@ -1213,17 +1247,13 @@ typedef struct ddog_crasht_Handle_StackFrame {
struct ddog_crasht_StackFrame *inner;
} ddog_crasht_Handle_StackFrame;

/**
* A generic result type for when an operation may fail,
* or may return <T> in case of success.
*/
typedef enum ddog_crasht_Result_HandleStackFrame_Tag {
DDOG_CRASHT_RESULT_HANDLE_STACK_FRAME_OK_HANDLE_STACK_FRAME,
DDOG_CRASHT_RESULT_HANDLE_STACK_FRAME_ERR_HANDLE_STACK_FRAME,
} ddog_crasht_Result_HandleStackFrame_Tag;
typedef enum ddog_crasht_StackFrame_NewResult_Tag {
DDOG_CRASHT_STACK_FRAME_NEW_RESULT_OK,
DDOG_CRASHT_STACK_FRAME_NEW_RESULT_ERR,
} ddog_crasht_StackFrame_NewResult_Tag;

typedef struct ddog_crasht_Result_HandleStackFrame {
ddog_crasht_Result_HandleStackFrame_Tag tag;
typedef struct ddog_crasht_StackFrame_NewResult {
ddog_crasht_StackFrame_NewResult_Tag tag;
union {
struct {
struct ddog_crasht_Handle_StackFrame ok;
Expand All @@ -1232,59 +1262,24 @@ typedef struct ddog_crasht_Result_HandleStackFrame {
struct ddog_Error err;
};
};
} ddog_crasht_Result_HandleStackFrame;
} ddog_crasht_StackFrame_NewResult;

/**
* A generic result type for when an operation may fail,
* or may return <T> in case of success.
*/
typedef enum ddog_crasht_Result_HandleStackTrace_Tag {
DDOG_CRASHT_RESULT_HANDLE_STACK_TRACE_OK_HANDLE_STACK_TRACE,
DDOG_CRASHT_RESULT_HANDLE_STACK_TRACE_ERR_HANDLE_STACK_TRACE,
} ddog_crasht_Result_HandleStackTrace_Tag;

typedef struct ddog_crasht_Result_HandleStackTrace {
ddog_crasht_Result_HandleStackTrace_Tag tag;
union {
struct {
struct ddog_crasht_Handle_StackTrace ok;
};
struct {
struct ddog_Error err;
};
};
} ddog_crasht_Result_HandleStackTrace;

/**
* A wrapper for returning owned strings from FFI
*/
typedef struct ddog_crasht_StringWrapper {
/**
* This is a String stuffed into the vec.
*/
struct ddog_Vec_U8 message;
} ddog_crasht_StringWrapper;

/**
* A generic result type for when an operation may fail,
* or may return <T> in case of success.
*/
typedef enum ddog_crasht_Result_StringWrapper_Tag {
DDOG_CRASHT_RESULT_STRING_WRAPPER_OK_STRING_WRAPPER,
DDOG_CRASHT_RESULT_STRING_WRAPPER_ERR_STRING_WRAPPER,
} ddog_crasht_Result_StringWrapper_Tag;
typedef enum ddog_StringWrapperResult_Tag {
DDOG_STRING_WRAPPER_RESULT_OK,
DDOG_STRING_WRAPPER_RESULT_ERR,
} ddog_StringWrapperResult_Tag;

typedef struct ddog_crasht_Result_StringWrapper {
ddog_crasht_Result_StringWrapper_Tag tag;
typedef struct ddog_StringWrapperResult {
ddog_StringWrapperResult_Tag tag;
union {
struct {
struct ddog_crasht_StringWrapper ok;
struct ddog_StringWrapper ok;
};
struct {
struct ddog_Error err;
};
};
} ddog_crasht_Result_StringWrapper;
} ddog_StringWrapperResult;

#ifdef __cplusplus
extern "C" {
Expand Down
Loading

0 comments on commit 3db5232

Please sign in to comment.