v0.7.17 - Fixed critical race condition in CLOSE message handler causing segfault during subscription storms
This commit is contained in:
@@ -1086,19 +1086,30 @@ int send_nip17_response(const char* sender_pubkey, const char* response_content,
|
||||
}
|
||||
}
|
||||
|
||||
// Store the gift wrap in database
|
||||
// Broadcast FIRST before storing (broadcasting needs the event intact)
|
||||
// Make a copy for broadcasting to avoid use-after-free issues
|
||||
cJSON* gift_wrap_copy = cJSON_Duplicate(gift_wraps[0], 1);
|
||||
if (!gift_wrap_copy) {
|
||||
cJSON_Delete(gift_wraps[0]);
|
||||
strncpy(error_message, "NIP-17: Failed to duplicate gift wrap for broadcast", error_size - 1);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Broadcast the copy to active subscriptions
|
||||
broadcast_event_to_subscriptions(gift_wrap_copy);
|
||||
|
||||
// Store the original in database
|
||||
int store_result = store_event(gift_wraps[0]);
|
||||
|
||||
// Clean up both copies
|
||||
cJSON_Delete(gift_wrap_copy);
|
||||
cJSON_Delete(gift_wraps[0]);
|
||||
|
||||
if (store_result != 0) {
|
||||
cJSON_Delete(gift_wraps[0]);
|
||||
strncpy(error_message, "NIP-17: Failed to store response gift wrap", error_size - 1);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Broadcast the response event to active subscriptions
|
||||
broadcast_event_to_subscriptions(gift_wraps[0]);
|
||||
|
||||
cJSON_Delete(gift_wraps[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user