From 0473eec0a2ab1e9e1189549822b0b445b3b9d4f4 Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Sun, 8 Oct 2023 13:52:49 +0000 Subject: [PATCH] Remove DB work from tf_ssb_notify_message_added, which runs on the main thread. git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4497 ed5197a5-7fde-0310-b194-c3ffbd925b24 --- src/ssb.c | 10 ++++------ src/ssb.db.c | 20 +++++++++++++++++++- src/ssb.h | 2 +- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/ssb.c b/src/ssb.c index 34b5e12f..425c7363 100644 --- a/src/ssb.c +++ b/src/ssb.c @@ -3279,7 +3279,7 @@ void tf_ssb_notify_blob_stored(tf_ssb_t* ssb, const char* id) ssb->blobs_stored++; } -void tf_ssb_notify_message_added(tf_ssb_t* ssb, const char* id) +void tf_ssb_notify_message_added(tf_ssb_t* ssb, const char* id, JSValue message_keys) { tf_ssb_message_added_callback_node_t* next = NULL; ssb->messages_stored++; @@ -3292,10 +3292,9 @@ void tf_ssb_notify_message_added(tf_ssb_t* ssb, const char* id) } JSContext* context = ssb->context; - JSValue message_keys = tf_ssb_db_get_message_by_id(ssb, id, true); - JSValue message = JS_GetPropertyStr(context, message_keys, "value"); - if (!JS_IsUndefined(message)) + if (!JS_IsUndefined(message_keys)) { + JSValue message = JS_GetPropertyStr(context, message_keys, "value"); JSValue author = JS_GetPropertyStr(context, message, "author"); const char* author_string = JS_ToCString(context, author); @@ -3327,9 +3326,8 @@ void tf_ssb_notify_message_added(tf_ssb_t* ssb, const char* id) JS_FreeCString(context, author_string); JS_FreeValue(context, author); + JS_FreeValue(context, message); } - JS_FreeValue(context, message); - JS_FreeValue(context, message_keys); } void tf_ssb_add_blob_want_added_callback(tf_ssb_t* ssb, void (*callback)(tf_ssb_t* ssb, const char* id, void* user_data), void (*cleanup)(tf_ssb_t* ssb, void* user_data), void* user_data) diff --git a/src/ssb.db.c b/src/ssb.db.c index eda2aaef..b6e14972 100644 --- a/src/ssb.db.c +++ b/src/ssb.db.c @@ -464,7 +464,25 @@ static void _tf_ssb_db_store_message_after_work(uv_work_t* work, int status) if (store->out_stored) { tf_trace_begin(trace, "notify_message_added"); - tf_ssb_notify_message_added(store->ssb, store->id); + JSContext* context = tf_ssb_get_context(store->ssb); + JSValue formatted = tf_ssb_format_message( + context, + store->previous, + store->author, + store->sequence, + store->timestamp, + "sha256", + store->content, + store->signature, + store->sequence_before_author); + JSValue message = JS_NewObject(context); + JS_SetPropertyStr(context, message, "key", JS_NewString(context, store->id)); + JS_SetPropertyStr(context, message, "value", formatted); + char timestamp_string[256]; + snprintf(timestamp_string, sizeof(timestamp_string), "%f", store->timestamp); + JS_SetPropertyStr(context, message, "timestamp", JS_NewString(context, timestamp_string)); + tf_ssb_notify_message_added(store->ssb, store->id, message); + JS_FreeValue(context, message); tf_trace_end(trace); } if (store->out_blob_wants) diff --git a/src/ssb.h b/src/ssb.h index f32ffa7c..ef2d6631 100644 --- a/src/ssb.h +++ b/src/ssb.h @@ -152,7 +152,7 @@ void tf_ssb_remove_broadcasts_changed_callback(tf_ssb_t* ssb, tf_ssb_broadcasts_ typedef void (tf_ssb_message_added_callback_t)(tf_ssb_t* ssb, const char* id, void* user_data); void tf_ssb_add_message_added_callback(tf_ssb_t* ssb, tf_ssb_message_added_callback_t* callback, tf_ssb_callback_cleanup_t* cleanup, void* user_data); void tf_ssb_remove_message_added_callback(tf_ssb_t* ssb, tf_ssb_message_added_callback_t* callback, void* user_data); -void tf_ssb_notify_message_added(tf_ssb_t* ssb, const char* id); +void tf_ssb_notify_message_added(tf_ssb_t* ssb, const char* id, JSValue message_with_keys); void tf_ssb_notify_blob_stored(tf_ssb_t* ssb, const char* id); typedef void (tf_ssb_blob_want_added_callback_t)(tf_ssb_t* ssb, const char* id, void* user_data);