]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/cats/bdb.c
Remove old code from bdb.c
[bacula/bacula] / bacula / src / cats / bdb.c
index 95ebf715fed3e410bb649a541b3cc47539468577..490506a2a032947e21ea5910d77894ead5d11459 100644 (file)
@@ -7,8 +7,12 @@
  *  system.
  *   
  *    Kern Sibbald, January MMI 
+ *
+ *    Version $Id$
+ *
  */
 
+
 /*
    Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker
 
@@ -64,11 +68,12 @@ static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
 #define DB_CLIENT_FILENAME   "client.db"
 #define DB_FILESET_FILENAME  "fileset.db"
 
-static char *make_filename(B_DB *mdb, char *name)
+static POOLMEM *make_filename(B_DB *mdb, char *name)
 {
-   char *dbf, sep;
+   char sep;
+   POOLMEM *dbf;
 
-   dbf = (char *) get_pool_memory(PM_FNAME);
+   dbf = get_pool_memory(PM_FNAME);
    if (working_directory[strlen(working_directory)-1] == '/') {
       sep = 0;
    } else {
@@ -113,10 +118,12 @@ db_init_database(char *db_name, char *db_user, char *db_password)
    memset(mdb, 0, sizeof(B_DB));
    Dmsg0(200, "DB struct init\n");
    mdb->db_name = bstrdup(db_name);
-   mdb->errmsg = (char *) get_pool_memory(PM_EMSG);
+   mdb->errmsg = get_pool_memory(PM_EMSG);
    *mdb->errmsg = 0;
-   mdb->cmd = (char *) get_pool_memory(PM_EMSG);  /* command buffer */
+   mdb->cmd = get_pool_memory(PM_EMSG);  /* command buffer */
    mdb->ref_count = 1;
+   mdb->cached_path = get_pool_memory(PM_FNAME);
+   mdb->cached_path_id = 0;
    qinsert(&db_list, &mdb->bq);       /* put db in list */
    Dmsg0(200, "Done db_open_database()\n");
    mdb->cfd = -1;
@@ -133,19 +140,17 @@ db_open_database(B_DB *mdb)
 {
    char *dbf;
    int fd, badctl;
-   int errstat;
    off_t filend;
 
    Dmsg1(200, "db_open_database() %s\n", mdb->db_name);
 
    P(mutex);
-   if ((errstat = pthread_mutex_init(&(mdb->mutex), NULL)) != 0) {
-      Mmsg1(&mdb->errmsg, "Unable to initialize DB mutex. ERR=%s\n", strerror(errstat));
+
+   if (rwl_init(&mdb->lock) != 0) {
+      Mmsg1(&mdb->errmsg, "Unable to initialize DB lock. ERR=%s\n", strerror(errno));
       V(mutex);
       return 0;
    }
-   P(mdb->mutex);                    /* test it once */
-   V(mdb->mutex);
 
    Dmsg0(200, "make_filename\n");
    dbf = make_filename(mdb, DB_CONTROL_FILENAME);
@@ -253,9 +258,11 @@ void db_close_database(B_DB *mdb)
       if (mdb->filesetfd) {
         fclose(mdb->filesetfd);
       }
-      pthread_mutex_destroy(&mdb->mutex);
+/*    pthread_mutex_destroy(&mdb->mutex); */
+      rwl_destroy(&mdb->lock);      
       free_pool_memory(mdb->errmsg);
       free_pool_memory(mdb->cmd);
+      free_pool_memory(mdb->cached_path);
       free(mdb);
    }
    V(mutex);
@@ -412,4 +419,23 @@ int bdb_open_media_file(B_DB *mdb)
    return 1;
 }
 
+
+void _db_lock(char *file, int line, B_DB *mdb)
+{
+   int errstat;
+   if ((errstat=rwl_writelock(&mdb->lock)) != 0) {
+      e_msg(file, line, M_ABORT, 0, "rwl_writelock failure. ERR=%s\n",
+          strerror(errstat));
+   }
+}    
+
+void _db_unlock(char *file, int line, B_DB *mdb)
+{
+   int errstat;
+   if ((errstat=rwl_writeunlock(&mdb->lock)) != 0) {
+      e_msg(file, line, M_ABORT, 0, "rwl_writeunlock failure. ERR=%s\n",
+          strerror(errstat));
+   }
+}    
+
 #endif /* HAVE_BACULA_DB */