================
@@ -226,13 +227,45 @@ lldb::SBError SBDebugger::InitializeWithErrorHandling() {
   return error;
 }
 
+#if LLVM_ENABLE_TELEMETRY
+#if ENABLE_BACKTRACES
+static void TelemetryHandler(void *) {
+  // TODO: get the bt into the msg?
+  // Also need to pre-alloc the memory for this entry?
+  lldb_private::telemetry::DebuggerInfo entry;
----------------
labath wrote:

The object itself is allocated on the stack, which is about the safest place 
you can allocate memory in a signal handler. The problem is if you have any 
variable length fields inside the object (strings, vectors, etc.), as they will 
try to allocate data on the heap. Something like this also has impact on the 
downstream implementation doing the actual sending, as that needs to be 
signal-safe as well (and I expect that to be the trickiest part).

Writing async-signal-safe code is very hard. What you're balancing here is the 
code complexity (and time to write it, etc.) versus the chance that you will 
not be able to send some of the crash notifications. It's a large scale and I 
don't know where your balance lies there. The only think *I* would like to 
avoid is flaky tests.

What I might try to do is let each downstream implementation make that 
determination for itself. Since you're not sending much in the way of actual 
data (a backtrace might be nice, but that could also be gathered elsewhere), 
maybe you don't need any create any objects here and just have a special 
telemetry entry point (`AtCrash`?) that you call and let it do whatever it 
wants. Or maybe we don't even need the special entry point, as the downstream 
implementation could register the handler -- if it wants to?

https://github.com/llvm/llvm-project/pull/127696
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to