gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [taler-exchange] 02/02: fix #4955 in auditordb, clean up fi


From: gnunet
Subject: [GNUnet-SVN] [taler-exchange] 02/02: fix #4955 in auditordb, clean up fix in exchangedb
Date: Tue, 04 Jul 2017 23:42:20 +0200

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository exchange.

commit 5d6dfde04413dd08d3056a724ace0cb6c99d4117
Author: Christian Grothoff <address@hidden>
AuthorDate: Tue Jul 4 23:33:57 2017 +0200

    fix #4955 in auditordb, clean up fix in exchangedb
---
 src/auditordb/plugin_auditordb_postgres.c   | 23 +++++++++++++--
 src/exchangedb/plugin_exchangedb_postgres.c | 46 +++++++++++------------------
 2 files changed, 38 insertions(+), 31 deletions(-)

diff --git a/src/auditordb/plugin_auditordb_postgres.c 
b/src/auditordb/plugin_auditordb_postgres.c
index 38894c8..4862cf2 100644
--- a/src/auditordb/plugin_auditordb_postgres.c
+++ b/src/auditordb/plugin_auditordb_postgres.c
@@ -821,8 +821,11 @@ static void
 db_conn_destroy (void *cls)
 {
   struct TALER_AUDITORDB_Session *session = cls;
-  PGconn *db_conn = session->conn;
+  PGconn *db_conn;
 
+  if (NULL == session)
+    return;
+  db_conn = session->conn;
   if (NULL != db_conn)
     PQfinish (db_conn);
   GNUNET_free (session);
@@ -844,7 +847,23 @@ postgres_get_session (void *cls)
   struct TALER_AUDITORDB_Session *session;
 
   if (NULL != (session = pthread_getspecific (pc->db_conn_threadlocal)))
-    return session;
+  {
+    if (CONNECTION_BAD == PQstatus (session->conn))
+    {
+      /**
+       * Reset the thread-local database-handle.  Disconnects from the
+       * DB.  Needed after the database server restarts as we need to
+       * properly reconnect. */
+      GNUNET_assert (0 == pthread_setspecific (pc->db_conn_threadlocal,
+                                             NULL));
+      PQfinish (session->conn);
+      GNUNET_free (session);
+    }
+    else
+    {
+      return session;
+    }
+  }
   db_conn = connect_to_postgres (pc);
   if (NULL == db_conn)
     return NULL;
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c 
b/src/exchangedb/plugin_exchangedb_postgres.c
index de3c783..8b3fe7f 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -1469,8 +1469,11 @@ static void
 db_conn_destroy (void *cls)
 {
   struct TALER_EXCHANGEDB_Session *session = cls;
-  PGconn *db_conn = session->conn;
+  PGconn *db_conn;
 
+  if (NULL == session)
+    return;
+  db_conn = session->conn;
   if (NULL != db_conn)
     PQfinish (db_conn);
   GNUNET_free (session);
@@ -1478,33 +1481,6 @@ db_conn_destroy (void *cls)
 
 
 /**
- * Reset the thread-local database-handle.  Disconnects from the DB.
- * Needed after the database server restarts as we need to properly
- * reconnect.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @return the database connection, or NULL on error
- */
-static void
-postgres_reset_session (void *cls)
-{
-  struct PostgresClosure *pc = cls;
-  struct TALER_EXCHANGEDB_Session *session;
-
-  if (NULL != (session = pthread_getspecific (pc->db_conn_threadlocal)))
-    return;
-  if (0 != pthread_setspecific (pc->db_conn_threadlocal,
-                                NULL))
-  {
-    GNUNET_break (0);
-    return;
-  }
-  PQfinish (session->conn);
-  GNUNET_free (session);
-}
-
-
-/**
  * Get the thread-local database-handle.
  * Connect to the db if the connection does not exist yet.
  *
@@ -1521,9 +1497,21 @@ postgres_get_session (void *cls)
   if (NULL != (session = pthread_getspecific (pc->db_conn_threadlocal)))
   {
     if (CONNECTION_BAD == PQstatus (session->conn))
-      postgres_reset_session (pc);
+    {
+      /**
+       * Reset the thread-local database-handle.  Disconnects from the
+       * DB.  Needed after the database server restarts as we need to
+       * properly reconnect. */
+      GNUNET_assert (0 ==
+                    pthread_setspecific (pc->db_conn_threadlocal,
+                                         NULL));
+      PQfinish (session->conn);
+      GNUNET_free (session);
+    }
     else
+    {
       return session;
+    }
   }
   db_conn = GNUNET_PQ_connect (pc->connection_cfg_str);
   if (NULL == db_conn)

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]