aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2024-03-07 18:08:14 +0100
committerThomas White <taw@physics.org>2024-03-07 18:08:14 +0100
commit489a4fdea07098dadd21c2454dc3887c1b893234 (patch)
tree27185fea46e5b1531ef631c463e8c91e75f67dd5
parent59261450dcc94b497ccf3dda488fe321d41c7b3a (diff)
ASAP::O: Do not free image->data_block until we get the callback
-rw-r--r--src/im-asapo.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/im-asapo.c b/src/im-asapo.c
index 510520b2..07666d97 100644
--- a/src/im-asapo.c
+++ b/src/im-asapo.c
@@ -277,6 +277,8 @@ static void send_callback(void *a, AsapoRequestCallbackPayloadHandle payload,
if ( asapo_is_error(err) ) {
show_asapo_error("ASAP::O send error", err);
}
+
+ free(a);
}
@@ -314,6 +316,11 @@ static void send_real(struct im_asapo *a, struct image *image)
return;
}
+ /* Blank out the data block pointer, to avoid it being freed by
+ * image_free shortly after we return. Instead, it will be freed
+ * by send_callback. */
+ image->data_block = NULL;
+
asapo_free_handle(&header);
asapo_free_handle(&err);
}
@@ -324,6 +331,7 @@ static void send_placeholder(struct im_asapo *a, struct image *image)
AsapoMessageHeaderHandle header;
AsapoErrorHandle err;
char filename[1024];
+ char *dummy;
snprintf(filename, 1024, "processed/%s_hits/%s-%i.placeholder",
a->stream, a->stream, image->serial);
@@ -340,8 +348,9 @@ static void send_placeholder(struct im_asapo *a, struct image *image)
0,
0); /* Auto ID */
+ dummy = strdup("SKIPPED");
err = asapo_new_handle();
- asapo_producer_send(a->producer, header, "SKIPPED",
+ asapo_producer_send(a->producer, header, dummy,
kTransferData | kStoreInDatabase, a->stream,
send_callback, &err);
if ( asapo_is_error(err) ) {