From 07461047d65974f28538e164b57c7f2fa8d87b56 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Thu, 23 Apr 2020 19:01:37 -0400 Subject: Call updateConsumer from handleError This should prevent continually crashing on the same ERROR in the pounce buffer. --- litterbox.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/litterbox.c b/litterbox.c index 08b98ac..632549a 100644 --- a/litterbox.c +++ b/litterbox.c @@ -632,8 +632,23 @@ static void handlePing(struct Message *msg) { format("PONG :%s\r\n", msg->params[0]); } +static void updateConsumer(size_t pos) { + static sqlite3_stmt *stmt; + const char *sql = SQL( + INSERT INTO consumers (host, port, pos) VALUES (:host, :port, :pos) + ON CONFLICT (host, port) DO + UPDATE SET pos = :pos WHERE host = :host AND port = :port; + ); + dbPersist(&stmt, sql); + dbBindText(stmt, ":host", host); + dbBindText(stmt, ":port", port); + dbBindInt(stmt, ":pos", pos); + dbRun(stmt); +} + static void handleError(struct Message *msg) { require(msg, false, 1); + if (msg->pos) updateConsumer(msg->pos); errx(EX_UNAVAILABLE, "%s", msg->params[0]); } @@ -674,20 +689,6 @@ static int compar(const void *cmd, const void *_handler) { return strcmp(cmd, handler->cmd); } -static void updateConsumer(size_t pos) { - static sqlite3_stmt *stmt; - const char *sql = SQL( - INSERT INTO consumers (host, port, pos) VALUES (:host, :port, :pos) - ON CONFLICT (host, port) DO - UPDATE SET pos = :pos WHERE host = :host AND port = :port; - ); - dbPersist(&stmt, sql); - dbBindText(stmt, ":host", host); - dbBindText(stmt, ":port", port); - dbBindInt(stmt, ":pos", pos); - dbRun(stmt); -} - static void handle(struct Message msg) { if (!msg.cmd) return; const struct Handler *handler = bsearch( -- cgit 1.4.1