]> git.sur5r.net Git - bacula/bacula/commitdiff
Fixed the batch insert MySQL thread specific data that was not
authorKern Sibbald <kern@sibbald.com>
Sun, 13 May 2007 19:38:30 +0000 (19:38 +0000)
committerKern Sibbald <kern@sibbald.com>
Sun, 13 May 2007 19:38:30 +0000 (19:38 +0000)
     being freed. See cats/mysql.c:db_thread_cleanup().

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@4772 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/cats/bdb.c
bacula/src/cats/mysql.c
bacula/src/cats/postgresql.c
bacula/src/cats/protos.h
bacula/src/cats/sqlite.c
bacula/src/dird/msgchan.c
bacula/technotes-2.1

index e49feadde4e435295b45342be424a11207752ad9..1e7bb71be862be7237ec88a38bc4656a932bde74 100644 (file)
@@ -289,6 +289,9 @@ void db_close_database(JCR *jcr, B_DB *mdb)
    V(mutex);
 }
 
+void db_thread_cleanup()
+{ }
+
 
 void db_escape_string(char *snew, char *old, int len)
 {
index 645dbb4385481e87a963246a166c85185091740e..a8211c7934e882d1a69ae9d11e74ff49e657267b 100644 (file)
@@ -258,6 +258,19 @@ db_close_database(JCR *jcr, B_DB *mdb)
    V(mutex);
 }
 
+/*
+ * This call is needed because the message channel thread
+ *  opens a database on behalf of a jcr that was created in
+ *  a different thread. MySQL then allocates thread specific
+ *  data, which is NOT freed when the original jcr thread
+ *  closes the database.  Thus the msgchan must call here
+ *  to cleanup any thread specific data that it created.
+ */
+void db_thread_cleanup()
+{ 
+   my_thread_end();
+}
+
 /*
  * Return the next unique index (auto-increment) for
  * the given table.  Return NULL on error.
index 0b0218a72de90ba799dc2753107b1ccc3aba7a49..a96ac4a0956fd23fe67f4abdc62b8795859539f0 100644 (file)
@@ -253,6 +253,9 @@ db_close_database(JCR *jcr, B_DB *mdb)
    V(mutex);
 }
 
+void db_thread_cleanup()
+{ }
+
 /*
  * Return the next unique index (auto-increment) for
  * the given table.  Return NULL on error.
index 342fa514389a458b60a71d520962680c63067441..8a8b2f01857c9f2b1ab05d23a5122978d333c304 100644 (file)
@@ -1,14 +1,7 @@
-/*
- *
- *  Database routines that are exported by the cats library for
- *    use elsewhere in Bacula (mainly the Director).
- *
- *    Version $Id$
- */
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2006 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2007 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
 */
+/*
+ *
+ *  Database routines that are exported by the cats library for
+ *    use elsewhere in Bacula (mainly the Director).
+ *
+ *    Version $Id$
+ */
 
 #ifndef __SQL_PROTOS_H
 #define __SQL_PROTOS_H
@@ -53,7 +53,7 @@ int  db_sql_query(B_DB *mdb, const char *cmd, DB_RESULT_HANDLER *result_handler,
 void db_start_transaction(JCR *jcr, B_DB *mdb);
 void db_end_transaction(JCR *jcr, B_DB *mdb);
 int db_int64_handler(void *ctx, int num_fields, char **row);
-
+void db_thread_cleanup();
 
 /* create.c */
 bool db_create_file_attributes_record(JCR *jcr, B_DB *mdb, ATTR_DBR *ar);
index 856a769699b286687682bd39a620031024c2004e..642af3815c027811cee9a1c2a344c9e530ad0e70 100644 (file)
@@ -253,6 +253,9 @@ db_close_database(JCR *jcr, B_DB *mdb)
    V(mutex);
 }
 
+void db_thread_cleanup()
+{ }
+
 /*
  * Return the next unique index (auto-increment) for
  * the given table.  Return 0 on error.
index 0a29de1e0ed211d3deb434e26131bdb4726bb26d..e6f85cee4958d7987cb2917d74849f55d12dbe29 100644 (file)
@@ -344,6 +344,7 @@ extern "C" void msg_thread_cleanup(void *arg)
    pthread_cond_broadcast(&jcr->term_wait); /* wakeup any waiting threads */
    Dmsg1(100, "=== End msg_thread. use=%d\n", jcr->use_count());
    free_jcr(jcr);                     /* release jcr */
+   db_thread_cleanup();               /* remove thread specific data */
 }
 
 /*
index edaa2e404f79994b37d0aef264acb6356fef7a9c..bb55ab07c264ed4a151c30bf86d61625df593b4b 100644 (file)
@@ -2,6 +2,8 @@
 
 General:
 13May07
+kes  Fixed the batch insert MySQL thread specific data that was not
+     being freed. See cats/mysql.c:db_thread_cleanup().
 kes  Fix restore before command.
 kes  Convert old hdr.name to name() in a few places.
 kes  Implement update jobid command.