From: Jeroen van der Heijden Date: Thu, 25 Apr 2019 15:50:39 +0000 (+0200) Subject: Fixed bug when writing a package from server to multi, #120 X-Git-Tag: archive/raspbian/2.0.44-1+rpi1~1^2~3^2~6^2~12 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=5da9f26fbe1546206b8048bd9cf918d0e08105c0;p=siridb-server.git Fixed bug when writing a package from server to multi, #120 --- diff --git a/include/siri/version.h b/include/siri/version.h index 9b99215c..da421a65 100644 --- a/include/siri/version.h +++ b/include/siri/version.h @@ -6,7 +6,7 @@ #define SIRIDB_VERSION_MAJOR 2 #define SIRIDB_VERSION_MINOR 0 -#define SIRIDB_VERSION_PATCH 33 +#define SIRIDB_VERSION_PATCH 34 /* * Use SIRIDB_VERSION_PRE_RELEASE for alpha release versions. @@ -15,7 +15,7 @@ * Note that debian alpha packages should use versions like this: * 2.0.30-0alpha0 */ -#define SIRIDB_VERSION_PRE_RELEASE "" +#define SIRIDB_VERSION_PRE_RELEASE "-alpha-0" #ifndef NDEBUG #define SIRIDB_VERSION_BUILD_RELEASE "+debug" diff --git a/itest/test_parentheses.py b/itest/test_parentheses.py index 26a48fc9..22035f10 100644 --- a/itest/test_parentheses.py +++ b/itest/test_parentheses.py @@ -283,7 +283,7 @@ class TestParenth(TestBase): 'Memory allocation error or maximum recursion depth reached.'): await self.client0.query(''' list series /.*/ - - {}/linux.*/{}'''.format('(' * 200, ')' * 200)) + {}/linux.*/{}'''.format('(' * 500, ')' * 500)) await self.client0.query('alter database set list_limit 5000') with self.assertRaisesRegex( diff --git a/itest/testing/spinner.py b/itest/testing/spinner.py index bf21fcc1..c9bca1a0 100644 --- a/itest/testing/spinner.py +++ b/itest/testing/spinner.py @@ -6,7 +6,7 @@ SPINNER3 = \ ('◐', '◓', '◑', '◒') -class Spinner(): +class Spinner: def __init__(self, charset=SPINNER3): self._idx = 0 diff --git a/itest/testing/task.py b/itest/testing/task.py index 0a6f2564..cbe936d3 100644 --- a/itest/testing/task.py +++ b/itest/testing/task.py @@ -5,7 +5,7 @@ from .spinner import Spinner from .color import Color -class Task(): +class Task: def __init__(self, title): self.running = True self.task = asyncio.ensure_future(self.process()) diff --git a/src/siri/db/pools.c b/src/siri/db/pools.c index 9b76b7a7..851539c7 100644 --- a/src/siri/db/pools.c +++ b/src/siri/db/pools.c @@ -215,6 +215,7 @@ void siridb_pools_send_pkg( } else { + sirinet_pkg_t * dup; siridb_pool_t * pool; uint16_t pid; @@ -227,13 +228,14 @@ void siridb_pools_send_pkg( pool = siridb->pools->pool + pid; - if (siridb_pool_send_pkg( + if ((dup = sirinet_pkg_dup(pkg)) == NULL || + siridb_pool_send_pkg( pool, - pkg, + dup, timeout, (sirinet_promise_cb) sirinet_promises_on_response, promises, - FLAG_KEEP_PKG | flags)) + flags & ~FLAG_KEEP_PKG)) { log_debug( "Cannot send package to pool '%u' " @@ -279,6 +281,7 @@ void siridb_pools_send_pkg_2some( } else { + sirinet_pkg_t * dup; siridb_pool_t * pool; size_t i; @@ -286,13 +289,14 @@ void siridb_pools_send_pkg_2some( { pool = vec->data[i]; - if (siridb_pool_send_pkg( + if ((dup = sirinet_pkg_dup(pkg)) == NULL || + siridb_pool_send_pkg( pool, - pkg, + dup, timeout, (sirinet_promise_cb) sirinet_promises_on_response, promises, - FLAG_KEEP_PKG | flags)) + flags & ~FLAG_KEEP_PKG)) { log_debug( "Cannot send package to at least on pool " diff --git a/src/siri/db/servers.c b/src/siri/db/servers.c index 2baed979..92f935a2 100644 --- a/src/siri/db/servers.c +++ b/src/siri/db/servers.c @@ -372,6 +372,7 @@ void siridb_servers_send_pkg( } else { + sirinet_pkg_t * dup; siridb_server_t * server; size_t i; @@ -381,13 +382,14 @@ void siridb_servers_send_pkg( if (siridb_server_is_online(server)) { - if (siridb_server_send_pkg( + if ((dup = sirinet_pkg_dup(pkg)) == NULL || + siridb_server_send_pkg( server, - pkg, + dup, timeout, (sirinet_promise_cb) sirinet_promises_on_response, promises, - FLAG_KEEP_PKG)) + 0 /* flags */)) { log_critical( "Allocation error while trying to send a package " diff --git a/src/siri/net/pkg.c b/src/siri/net/pkg.c index 699fbae0..8ab559a8 100644 --- a/src/siri/net/pkg.c +++ b/src/siri/net/pkg.c @@ -180,17 +180,13 @@ int sirinet_pkg_send(sirinet_stream_t * client, sirinet_pkg_t * pkg) /* * Returns a copy of package allocated using malloc(). - * In case of an error, NULL is returned and a signal is raised. + * In case of an error, NULL is returned. */ sirinet_pkg_t * sirinet_pkg_dup(sirinet_pkg_t * pkg) { size_t size = sizeof(sirinet_pkg_t) + pkg->len; sirinet_pkg_t * dup = malloc(size); - if (dup == NULL) - { - ERR_ALLOC - } - else + if (dup != NULL) { memcpy(dup, pkg, size); }