]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/cats/bdb_delete.c
Fix segfault from double free or RestoreBootstrap; add L_NONE for restore and admin...
[bacula/bacula] / bacula / src / cats / bdb_delete.c
index 3537ef34b15ae4921799cd77b1bde0f7c615dcbc..b2c5ad10c5551eda886d91632cd2f0d8e05c553b 100644 (file)
@@ -9,10 +9,12 @@
  *  system.
  *   
  *    Kern Sibbald, January MMI 
+ *
+ *    Version $Id$
  */
 
 /*
-   Copyright (C) 2001, 2002 Kern Sibbald and John Walker
+   Copyright (C) 2001-2003 Kern Sibbald and John Walker
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
  * Returns: 0 on error
  *         the number of records deleted on success 
  */
-int db_delete_pool_record(B_DB *mdb, POOL_DBR *pr)
+int db_delete_pool_record(JCR *jcr, B_DB *mdb, POOL_DBR *pr)
 {
    int stat;
    POOL_DBR opr;
 
+   db_lock(mdb);
    pr->PoolId = 0;                   /* Search on Pool Name */
-   if (!db_get_pool_record(mdb, pr)) {
+   if (!db_get_pool_record(jcr, mdb, pr)) {
       Mmsg1(&mdb->errmsg, "No pool record %s exists\n", pr->Name);
+      db_unlock(mdb);
       return 0;
    }
-   P(mdb->mutex);
    fseek(mdb->poolfd, pr->rec_addr, SEEK_SET);
    memset(&opr, 0, sizeof(opr));
    stat = fwrite(&opr, sizeof(opr), 1, mdb->poolfd);
-   V(mdb->mutex);
+   db_unlock(mdb);
    return stat; 
 }
 
-int db_delete_media_record(B_DB *mdb, MEDIA_DBR *mr) 
+int db_delete_media_record(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr) 
 { 
    int stat;
    MEDIA_DBR omr;
 
-   if (!db_get_media_record(mdb, mr)) {
+   db_lock(mdb);
+   if (!db_get_media_record(jcr, mdb, mr)) {
       Mmsg0(&mdb->errmsg, "Media record not found.\n");
+      db_unlock(mdb);
       return 0;
    }
-   P(mdb->mutex);
    fseek(mdb->mediafd, mr->rec_addr, SEEK_SET);
    memset(&omr, 0, sizeof(omr));
    stat = fwrite(&omr, sizeof(omr), 1, mdb->mediafd);
-   V(mdb->mutex);
+   db_unlock(mdb);
    return stat; 
 }