]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - afs.c
afs: Introduce flush_and_free_pb().
[paraslash.git] / afs.c
diff --git a/afs.c b/afs.c
index eb8480890d5db6e75077b4f6d81d769b7de9db4d..0b2a4765b16f82fbde4674ac230bda4d2b5f9e18 100644 (file)
--- a/afs.c
+++ b/afs.c
@@ -564,6 +564,20 @@ int afs_cb_result_handler(struct osl_object *result, uint8_t band,
        return send_sb(&cc->scc, result->data, result->size, band, true);
 }
 
+void flush_and_free_pb(struct para_buffer *pb)
+{
+       int ret;
+       struct afs_max_size_handler_data *amshd = pb->private_data;
+
+       if (pb->buf && pb->size > 0) {
+               ret = pass_buffer_as_shm(amshd->fd, amshd->band, pb->buf,
+                       pb->offset);
+               if (ret < 0)
+                       PARA_ERROR_LOG("%s\n", para_strerror(-ret));
+       }
+       free(pb->buf);
+}
+
 static void com_select_callback(int fd, const struct osl_object *query)
 {
        struct para_buffer pb = {
@@ -602,9 +616,7 @@ static void com_select_callback(int fd, const struct osl_object *query)
                        current_mop?  current_mop : "dummy mood",
                        num_admissible);
 out:
-       if (pb.offset)
-               pass_buffer_as_shm(fd, SBD_OUTPUT, pb.buf, pb.offset);
-       free(pb.buf);
+       flush_and_free_pb(&pb);
 }
 
 int com_select(struct command_context *cc)
@@ -1022,9 +1034,7 @@ static void create_tables_callback(int fd, const struct osl_object *query)
 out:
        if (ret < 0)
                para_printf(&pb, "%s\n", para_strerror(-ret));
-       if (pb.buf)
-               pass_buffer_as_shm(fd, SBD_OUTPUT, pb.buf, pb.offset);
-       free(pb.buf);
+       flush_and_free_pb(&pb);
 }
 
 int com_init(struct command_context *cc)