Fixed bug when writing a package from server to multi, #120
authorJeroen van der Heijden <jeroen@transceptor.technology>
Thu, 25 Apr 2019 15:50:39 +0000 (17:50 +0200)
committerJeroen van der Heijden <jeroen@transceptor.technology>
Thu, 25 Apr 2019 15:50:39 +0000 (17:50 +0200)
include/siri/version.h
itest/test_parentheses.py
itest/testing/spinner.py
itest/testing/task.py
src/siri/db/pools.c
src/siri/db/servers.c
src/siri/net/pkg.c

index 9b99215c16b4f3d9354d15741d57f1d943ff04a4..da421a65c76386d5a54d3cd3d772932284c0a42f 100644 (file)
@@ -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"
index 26a48fc9d793e925025fb791b6246f2b5ff703de..22035f10ec1ff4e611e2bec755b02ad8af00726d 100644 (file)
@@ -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(
index bf21fcc1ca3366063d6758a0a320d32f614d1beb..c9bca1a09150e417f338c2e95c66cf94ca794238 100644 (file)
@@ -6,7 +6,7 @@ SPINNER3 = \
     ('◐', '◓', '◑', '◒')
 
 
-class Spinner():
+class Spinner:
 
     def __init__(self, charset=SPINNER3):
         self._idx = 0
index 0a6f2564ee3fdf4414672bfde2e32979ada2a02c..cbe936d38b8cf35ca78a1673601392386a8b8c97 100644 (file)
@@ -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())
index 9b76b7a7b2473bca8527886c613adaaa6471701e..851539c70647ccebbb54f9cd7baaee4678fc8153 100644 (file)
@@ -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 "
index 2baed9796dd985f9826dbd407d195a68efd13d18..92f935a244d0d340f343d51132c4830cc85b3a48 100644 (file)
@@ -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 "
index 699fbae0cc1d2049f499a5ac273bb51903d64e12..8ab559a889d695437b95250b6250aaa3e275b3d4 100644 (file)
@@ -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);
     }