Skip to content

Commit

Permalink
Merge branch 'main' into bob/min-log
Browse files Browse the repository at this point in the history
  • Loading branch information
bwoebi authored Feb 6, 2025
2 parents d7acab5 + f439466 commit 1b23af9
Show file tree
Hide file tree
Showing 18 changed files with 359 additions and 178 deletions.
50 changes: 25 additions & 25 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 Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ resolver = "2"
[workspace.package]
rust-version = "1.78.0"
edition = "2021"
version = "15.0.0"
version = "16.0.1"
license = "Apache-2.0"

[profile.dev]
Expand Down
6 changes: 6 additions & 0 deletions crashtracker-ffi/cbindgen.toml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@ renaming_overrides_prefixing = true
"Vec_Tag" = "ddog_Vec_Tag"
"Vec_U8" = "ddog_Vec_U8"
"VoidResult" = "ddog_VoidResult"
"StringWrapper" = "ddog_StringWrapper"
"StringWrapperResult" = "ddog_StringWrapperResult"
"CrashInfoBuilderNewResult" = " ddog_crasht_CrashInfoBuilder_NewResult"
"StackTraceNewResult" = " ddog_crasht_StackTrace_NewResult"
"StackFrameNewResult" = "ddog_crasht_StackFrame_NewResult"
"CrashInfoNewResult" = "ddog_crasht_CrashInfo_NewResult"

[export.mangle]
rename_types = "PascalCase"
Expand Down
39 changes: 33 additions & 6 deletions crashtracker-ffi/src/crash_info/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,28 @@ use super::{Metadata, OsInfo, ProcInfo, SigInfo, Span, ThreadData};
use ::function_name::named;
use datadog_crashtracker::{CrashInfo, CrashInfoBuilder, ErrorKind, StackTrace};
use ddcommon_ffi::{
slice::AsBytes, wrap_with_ffi_result, wrap_with_void_ffi_result, CharSlice, Handle, Result,
slice::AsBytes, wrap_with_ffi_result, wrap_with_void_ffi_result, CharSlice, Error, Handle,
Slice, Timespec, ToInner, VoidResult,
};

////////////////////////////////////////////////////////////////////////////////////////////////////
// FFI API //
////////////////////////////////////////////////////////////////////////////////////////////////////

#[allow(dead_code)]
#[repr(C)]
pub enum CrashInfoBuilderNewResult {
Ok(Handle<CrashInfoBuilder>),
Err(Error),
}

/// Create a new CrashInfoBuilder, and returns an opaque reference to it.
/// # Safety
/// No safety issues.
#[no_mangle]
#[must_use]
pub unsafe extern "C" fn ddog_crasht_CrashInfoBuilder_new() -> Result<Handle<CrashInfoBuilder>> {
ddcommon_ffi::Result::Ok(CrashInfoBuilder::new().into())
pub unsafe extern "C" fn ddog_crasht_CrashInfoBuilder_new() -> CrashInfoBuilderNewResult {
CrashInfoBuilderNewResult::Ok(CrashInfoBuilder::new().into())
}

/// # Safety
Expand All @@ -34,15 +41,31 @@ pub unsafe extern "C" fn ddog_crasht_CrashInfoBuilder_drop(builder: *mut Handle<
}
}

#[allow(dead_code)]
#[repr(C)]
pub enum CrashInfoNewResult {
Ok(Handle<CrashInfo>),
Err(Error),
}

/// # Safety
/// The `builder` can be null, but if non-null it must point to a Builder made by this module,
/// which has not previously been dropped.
#[no_mangle]
#[must_use]
#[named]
pub unsafe extern "C" fn ddog_crasht_CrashInfoBuilder_build(
builder: *mut Handle<CrashInfoBuilder>,
) -> CrashInfoNewResult {
match ddog_crasht_crash_info_builder_build_impl(builder) {
Ok(crash_info) => CrashInfoNewResult::Ok(crash_info),
Err(err) => CrashInfoNewResult::Err(err.into()),
}
}

#[named]
unsafe fn ddog_crasht_crash_info_builder_build_impl(
mut builder: *mut Handle<CrashInfoBuilder>,
) -> Result<Handle<CrashInfo>> {
) -> anyhow::Result<Handle<CrashInfo>> {
wrap_with_ffi_result!({ anyhow::Ok(builder.take()?.build()?.into()) })
}

Expand Down Expand Up @@ -313,9 +336,13 @@ pub unsafe extern "C" fn ddog_crasht_CrashInfoBuilder_with_stack(
#[named]
pub unsafe extern "C" fn ddog_crasht_CrashInfoBuilder_with_thread(
mut builder: *mut Handle<CrashInfoBuilder>,
thread: ThreadData,
mut thread: ThreadData,
) -> VoidResult {
wrap_with_void_ffi_result!({
if thread.crashed {
let stack = (thread.stack.to_inner_mut())?.clone();
builder.to_inner_mut()?.with_stack(stack)?;
}
builder.to_inner_mut()?.with_thread(thread.try_into()?)?;
})
}
Expand Down
Loading

0 comments on commit 1b23af9

Please sign in to comment.