-diff -Naur cvs/src/cats/cats.h my/src/cats/cats.h
---- cvs/src/cats/cats.h 2006-12-06 15:11:53.000000000 +0100
-+++ my/src/cats/cats.h 2007-01-10 19:21:42.000000000 +0100
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/cats/cats.h bacula.new/src/cats/cats.h
+--- bacula/src/cats/cats.h 2007-02-16 09:53:54.000000000 +0100
++++ bacula.new/src/cats/cats.h 2007-02-20 17:43:47.000000000 +0100
@@ -141,6 +141,7 @@
POOLMEM *fname; /* Filename only */
POOLMEM *path; /* Path only */
#define SQL_ROW POSTGRESQL_ROW
#define SQL_FIELD POSTGRESQL_FIELD
-diff -Naur cvs/src/cats/mysql.c my/src/cats/mysql.c
---- cvs/src/cats/mysql.c 2006-12-09 14:41:50.000000000 +0100
-+++ my/src/cats/mysql.c 2007-01-10 19:21:42.000000000 +0100
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/cats/mysql.c bacula.new/src/cats/mysql.c
+--- bacula/src/cats/mysql.c 2007-02-16 09:53:54.000000000 +0100
++++ bacula.new/src/cats/mysql.c 2007-02-20 17:43:47.000000000 +0100
@@ -121,6 +121,7 @@
mdb->fname = get_pool_memory(PM_FNAME);
mdb->path = get_pool_memory(PM_FNAME);
+
#endif /* HAVE_MYSQL */
+
-diff -Naur cvs/src/cats/postgresql.c my/src/cats/postgresql.c
---- cvs/src/cats/postgresql.c 2006-12-06 15:11:53.000000000 +0100
-+++ my/src/cats/postgresql.c 2007-01-10 19:25:47.000000000 +0100
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/cats/postgresql.c bacula.new/src/cats/postgresql.c
+--- bacula/src/cats/postgresql.c 2007-02-16 09:53:54.000000000 +0100
++++ bacula.new/src/cats/postgresql.c 2007-02-20 17:43:47.000000000 +0100
@@ -124,6 +124,7 @@
mdb->fname = get_pool_memory(PM_FNAME);
mdb->path = get_pool_memory(PM_FNAME);
+ " WHERE NOT EXISTS "
+ " (SELECT Name FROM Filename WHERE Name = a.Name)";
#endif /* HAVE_POSTGRESQL */
-diff -Naur cvs/src/cats/protos.h my/src/cats/protos.h
---- cvs/src/cats/protos.h 2006-12-06 15:11:53.000000000 +0100
-+++ my/src/cats/protos.h 2007-01-10 19:21:42.000000000 +0100
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/cats/protos.h bacula.new/src/cats/protos.h
+--- bacula/src/cats/protos.h 2007-02-16 09:53:54.000000000 +0100
++++ bacula.new/src/cats/protos.h 2007-02-20 17:43:47.000000000 +0100
@@ -67,6 +67,10 @@
bool db_create_device_record(JCR *jcr, B_DB *mdb, DEVICE_DBR *dr);
bool db_create_storage_record(JCR *jcr, B_DB *mdb, STORAGE_DBR *sr);
/* delete.c */
int db_delete_pool_record(JCR *jcr, B_DB *db, POOL_DBR *pool_dbr);
-diff -Naur cvs/src/cats/sql_create.c my/src/cats/sql_create.c
---- cvs/src/cats/sql_create.c 2006-12-06 15:11:53.000000000 +0100
-+++ my/src/cats/sql_create.c 2007-01-10 21:46:59.000000000 +0100
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/cats/sql_create.c bacula.new/src/cats/sql_create.c
+--- bacula/src/cats/sql_create.c 2007-02-16 09:53:54.000000000 +0100
++++ bacula.new/src/cats/sql_create.c 2007-02-20 17:43:47.000000000 +0100
@@ -664,9 +664,208 @@
* };
*/
/*
* This is the master File entry containing the attributes.
* The filename and path records have already been created.
-diff -Naur cvs/src/cats/sqlite.c my/src/cats/sqlite.c
---- cvs/src/cats/sqlite.c 2006-12-06 15:11:53.000000000 +0100
-+++ my/src/cats/sqlite.c 2007-01-10 19:21:42.000000000 +0100
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/cats/sqlite.c bacula.new/src/cats/sqlite.c
+--- bacula/src/cats/sqlite.c 2007-02-16 09:53:54.000000000 +0100
++++ bacula.new/src/cats/sqlite.c 2007-02-20 17:43:47.000000000 +0100
@@ -108,6 +108,7 @@
mdb->fname = get_pool_memory(PM_FNAME);
mdb->path = get_pool_memory(PM_FNAME);
mdb->allow_transactions = mult_db_connections;
qinsert(&db_list, &mdb->bq); /* put db in list */
V(mutex);
-@@ -213,6 +214,7 @@
+@@ -215,6 +216,7 @@
free_pool_memory(mdb->fname);
free_pool_memory(mdb->path);
free_pool_memory(mdb->esc_name);
if (mdb->db_name) {
free(mdb->db_name);
}
-@@ -433,4 +435,16 @@
+@@ -435,4 +437,16 @@
return mdb->fields[mdb->field++];
}
+
+
#endif /* HAVE_SQLITE */
-diff -Naur cvs/src/dird/backup.c my/src/dird/backup.c
---- cvs/src/dird/backup.c 2006-12-13 11:57:52.000000000 +0100
-+++ my/src/dird/backup.c 2007-01-10 19:21:42.000000000 +0100
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/dird/backup.c bacula.new/src/dird/backup.c
+--- bacula/src/dird/backup.c 2007-02-20 14:38:45.000000000 +0100
++++ bacula.new/src/dird/backup.c 2007-02-20 17:43:47.000000000 +0100
@@ -233,6 +233,9 @@
/* Pickup Job termination data */
if (stat == JS_Terminated) {
backup_cleanup(jcr, stat);
return true;
-diff -Naur cvs/src/dird/jobq.c my/src/dird/jobq.c
---- cvs/src/dird/jobq.c 2006-11-24 11:29:37.000000000 +0100
-+++ my/src/dird/jobq.c 2007-01-10 19:21:42.000000000 +0100
-@@ -563,6 +563,10 @@
- db_close_database(jcr, jcr->db);
- jcr->db = NULL;
- }
-+ if (jcr->db_batch) {
-+ db_close_database(jcr, jcr->db_batch);
-+ jcr->db_batch = NULL;
-+ }
- Dmsg2(2300, "====== Termination job=%d use_cnt=%d\n", jcr->JobId, jcr->use_count());
- jcr->SDJobStatus = 0;
- V(jq->mutex); /* release internal lock */
-diff -Naur cvs/src/jcr.h my/src/jcr.h
---- cvs/src/jcr.h 2006-12-19 21:57:38.000000000 +0100
-+++ my/src/jcr.h 2007-01-10 19:21:42.000000000 +0100
-@@ -184,6 +184,7 @@
- bool cached_attribute; /* set if attribute is cached */
- POOLMEM *attr; /* Attribute string from SD */
- B_DB *db; /* database pointer */
-+ B_DB *db_batch; /* database pointer for batch insert */
- ATTR_DBR *ar; /* DB attribute record */
-
- /* Daemon specific part of JCR */
-diff -Naur org/bacula-2.0.0/src/baconfig.h bacula-2.0.0/src/baconfig.h
---- org/bacula-2.0.0/src/baconfig.h 2006-12-17 14:36:35.000000000 +0100
-+++ bacula-2.0.0/src/baconfig.h 2007-01-09 16:10:02.000000000 +0100
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/baconfig.h bacula.new/src/baconfig.h
+--- bacula/src/baconfig.h 2007-02-16 09:54:16.000000000 +0100
++++ bacula.new/src/baconfig.h 2007-02-20 17:55:27.000000000 +0100
@@ -106,8 +106,8 @@
#define OSDependentInit()
#define tape_open open
#define tape_close ::close
#endif
-diff -Naur org/bacula-2.0.0/src/cats/sql_find.c bacula-2.0.0/src/cats/sql_find.c
---- org/bacula-2.0.0/src/cats/sql_find.c 2006-11-27 11:02:59.000000000 +0100
-+++ bacula-2.0.0/src/cats/sql_find.c 2007-01-09 16:10:02.000000000 +0100
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/cats/sql_find.c bacula.new/src/cats/sql_find.c
+--- bacula/src/cats/sql_find.c 2007-02-16 09:53:54.000000000 +0100
++++ bacula.new/src/cats/sql_find.c 2007-02-20 17:55:27.000000000 +0100
@@ -283,7 +283,7 @@
"VolBytes,VolMounts,VolErrors,VolWrites,MaxVolBytes,VolCapacityBytes,"
"VolRetention,VolUseDuration,MaxVolJobs,MaxVolFiles,Recycle,Slot,"
mr->Enabled = 1; /* ensured via query */
sql_free_result(mdb);
-diff -Naur org/bacula-2.0.0/src/cats/sql_get.c bacula-2.0.0/src/cats/sql_get.c
---- org/bacula-2.0.0/src/cats/sql_get.c 2006-11-27 11:02:59.000000000 +0100
-+++ bacula-2.0.0/src/cats/sql_get.c 2007-01-09 16:10:02.000000000 +0100
-@@ -872,7 +872,7 @@
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/cats/sql_get.c bacula.new/src/cats/sql_get.c
+--- bacula/src/cats/sql_get.c 2007-02-16 09:53:54.000000000 +0100
++++ bacula.new/src/cats/sql_get.c 2007-02-20 17:55:27.000000000 +0100
+@@ -876,7 +876,7 @@
"MaxVolFiles,Recycle,Slot,FirstWritten,LastWritten,InChanger,"
"EndFile,EndBlock,VolParts,LabelType,LabelDate,StorageId,"
"Enabled,LocationId,RecycleCount,InitialWrite,"
"FROM Media WHERE MediaId=%s",
edit_int64(mr->MediaId, ed1));
} else { /* find by name */
-@@ -882,7 +882,7 @@
+@@ -886,7 +886,7 @@
"MaxVolFiles,Recycle,Slot,FirstWritten,LastWritten,InChanger,"
"EndFile,EndBlock,VolParts,LabelType,LabelDate,StorageId,"
"Enabled,LocationId,RecycleCount,InitialWrite,"
"FROM Media WHERE VolumeName='%s'", mr->VolumeName);
}
-@@ -938,6 +938,8 @@
+@@ -942,6 +942,8 @@
mr->InitialWrite = (time_t)str_to_utime(mr->cInitialWrite);
mr->ScratchPoolId = str_to_int64(row[33]);
mr->RecyclePoolId = str_to_int64(row[34]);
ok = true;
}
-diff -Naur org/bacula-2.0.0/src/dird/catreq.c bacula-2.0.0/src/dird/catreq.c
---- org/bacula-2.0.0/src/dird/catreq.c 2006-12-23 17:33:52.000000000 +0100
-+++ bacula-2.0.0/src/dird/catreq.c 2007-01-09 16:10:02.000000000 +0100
-@@ -280,7 +280,7 @@
- mr.VolWriteTime = sdmr.VolWriteTime;
- mr.VolParts = sdmr.VolParts;
- bstrncpy(mr.VolStatus, sdmr.VolStatus, sizeof(mr.VolStatus));
-- if (jcr->wstore->StorageId) {
-+ if (jcr->wstore && jcr->wstore->StorageId) {
- mr.StorageId = jcr->wstore->StorageId;
- }
-
-diff -Naur org/bacula-2.0.0/src/dird/dird.c bacula-2.0.0/src/dird/dird.c
---- org/bacula-2.0.0/src/dird/dird.c 2006-12-22 16:01:05.000000000 +0100
-+++ bacula-2.0.0/src/dird/dird.c 2007-01-09 16:10:02.000000000 +0100
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/dird/dird.c bacula.new/src/dird/dird.c
+--- bacula/src/dird/dird.c 2007-02-16 09:53:51.000000000 +0100
++++ bacula.new/src/dird/dird.c 2007-02-20 17:55:31.000000000 +0100
@@ -269,6 +269,8 @@
init_job_server(director->MaxConcurrentJobs);
Dmsg0(200, "wait for next job\n");
/* Main loop -- call scheduler to get next job to run */
while ( (jcr = wait_for_next_job(runjob)) ) {
-diff -Naur org/bacula-2.0.0/src/dird/getmsg.c bacula-2.0.0/src/dird/getmsg.c
---- org/bacula-2.0.0/src/dird/getmsg.c 2006-11-21 14:20:09.000000000 +0100
-+++ bacula-2.0.0/src/dird/getmsg.c 2007-01-09 16:10:02.000000000 +0100
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/dird/getmsg.c bacula.new/src/dird/getmsg.c
+--- bacula/src/dird/getmsg.c 2007-02-16 09:53:51.000000000 +0100
++++ bacula.new/src/dird/getmsg.c 2007-02-20 17:55:31.000000000 +0100
@@ -62,7 +62,9 @@
"open=%d labeled=%d offline=%d "
"reserved=%d max_writers=%d "
}
continue;
}
-diff -Naur org/bacula-2.0.0/src/stored/acquire.c bacula-2.0.0/src/stored/acquire.c
---- org/bacula-2.0.0/src/stored/acquire.c 2006-12-16 16:30:22.000000000 +0100
-+++ bacula-2.0.0/src/stored/acquire.c 2007-01-09 16:10:02.000000000 +0100
-@@ -461,8 +461,8 @@
-
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/stored/acquire.c bacula.new/src/stored/acquire.c
+--- bacula/src/stored/acquire.c 2007-02-16 10:05:07.000000000 +0100
++++ bacula.new/src/stored/acquire.c 2007-02-20 17:56:56.000000000 +0100
+@@ -464,7 +464,7 @@
if (dev->can_read()) {
dev->clear_read(); /* clear read bit */
--
-- /******FIXME**** send read volume usage statistics to director */
-+ Dmsg0(100, "dir_update_vol_info. Release0\n");
+ Dmsg0(100, "dir_update_vol_info. Release0\n");
+-// dir_update_volume_info(dcr, false); /* send Volume info to Director */
+ dir_update_volume_info(dcr, false); /* send Volume info to Director */
} else if (dev->num_writers > 0) {
/*
-diff -Naur org/bacula-2.0.0/src/stored/ansi_label.c bacula-2.0.0/src/stored/ansi_label.c
---- org/bacula-2.0.0/src/stored/ansi_label.c 2006-11-21 18:03:45.000000000 +0100
-+++ bacula-2.0.0/src/stored/ansi_label.c 2007-01-09 16:10:02.000000000 +0100
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/stored/ansi_label.c bacula.new/src/stored/ansi_label.c
+--- bacula/src/stored/ansi_label.c 2007-02-16 09:54:03.000000000 +0100
++++ bacula.new/src/stored/ansi_label.c 2007-02-20 17:55:31.000000000 +0100
@@ -87,7 +87,7 @@
/* Read a maximum of 5 records VOL1, HDR1, ... HDR4 */
for (i=0; i < 6; i++) {
if (stat != sizeof(label)) {
berrno be;
if (stat == -1) {
-diff -Naur org/bacula-2.0.0/src/stored/askdir.c bacula-2.0.0/src/stored/askdir.c
---- org/bacula-2.0.0/src/stored/askdir.c 2006-12-08 15:27:10.000000000 +0100
-+++ bacula-2.0.0/src/stored/askdir.c 2007-01-09 16:10:02.000000000 +0100
-@@ -308,11 +308,6 @@
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/stored/askdir.c bacula.new/src/stored/askdir.c
+--- bacula/src/stored/askdir.c 2007-02-16 09:54:03.000000000 +0100
++++ bacula.new/src/stored/askdir.c 2007-02-20 17:55:31.000000000 +0100
+@@ -321,11 +321,6 @@
Pmsg0(000, _("NULL Volume name. This shouldn't happen!!!\n"));
return false;
}
- return false;
- }
- Dmsg1(100, "Update cat VolFiles=%d\n", dev->file);
- /* Just labeled or relabeled the tape */
-diff -Naur org/bacula-2.0.0/src/stored/block.c bacula-2.0.0/src/stored/block.c
---- org/bacula-2.0.0/src/stored/block.c 2006-12-16 12:10:17.000000000 +0100
-+++ bacula-2.0.0/src/stored/block.c 2007-01-09 16:10:02.000000000 +0100
+ /* Lock during Volume update */
+ P(vol_info_mutex);
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/stored/block.c bacula.new/src/stored/block.c
+--- bacula/src/stored/block.c 2007-02-16 09:54:03.000000000 +0100
++++ bacula.new/src/stored/block.c 2007-02-20 17:55:31.000000000 +0100
@@ -537,11 +537,8 @@
bmicrosleep(5, 0); /* pause a bit if busy or lots of errors */
dev->clrerror(-1);
} while (stat == -1 && (errno == EBUSY || errno == EIO) && retry++ < 3);
#ifdef DEBUG_BLOCK_ZEROING
-@@ -979,11 +976,8 @@
+@@ -978,11 +975,8 @@
bmicrosleep(10, 0); /* pause a bit if busy or lots of errors */
dev->clrerror(-1);
}
} while (stat == -1 && (errno == EBUSY || errno == EINTR || errno == EIO) && retry++ < 3);
if (stat < 0) {
berrno be;
-diff -Naur org/bacula-2.0.0/src/stored/dev.c bacula-2.0.0/src/stored/dev.c
---- org/bacula-2.0.0/src/stored/dev.c 2006-12-22 16:01:05.000000000 +0100
-+++ bacula-2.0.0/src/stored/dev.c 2007-01-09 16:10:02.000000000 +0100
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/stored/dev.c bacula.new/src/stored/dev.c
+--- bacula/src/stored/dev.c 2007-02-16 09:54:03.000000000 +0100
++++ bacula.new/src/stored/dev.c 2007-02-20 17:55:31.000000000 +0100
@@ -1325,7 +1325,7 @@
mt_com.mt_count = 1;
while (num-- && !at_eot()) {
/* Return the resource name for the device */
const char *DEVICE::name() const
-diff -Naur org/bacula-2.0.0/src/stored/dev.h bacula-2.0.0/src/stored/dev.h
---- org/bacula-2.0.0/src/stored/dev.h 2006-12-14 12:41:01.000000000 +0100
-+++ bacula-2.0.0/src/stored/dev.h 2007-01-09 16:10:02.000000000 +0100
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/stored/dev.h bacula.new/src/stored/dev.h
+--- bacula/src/stored/dev.h 2007-02-16 09:54:03.000000000 +0100
++++ bacula.new/src/stored/dev.h 2007-02-20 17:55:31.000000000 +0100
@@ -280,7 +280,17 @@
int rem_wait_sec;
int num_wait;
-diff -Naur org/bacula-2.0.0/src/dird/protos.h bacula-2.0.0/src/dird/protos.h
---- org/bacula-2.0.0/src/dird/protos.h 2006-12-23 17:33:52.000000000 +0100
-+++ bacula-2.0.0/src/dird/protos.h 2007-01-09 16:12:18.000000000 +0100
-@@ -195,6 +195,9 @@
- int get_num_drives_from_SD(UAContext *ua);
- void update_slots(UAContext *ua);
-
-+/* ua_update.c */
-+void update_vol_pool(UAContext *ua, char *val, MEDIA_DBR *mr, POOL_DBR *opr);
-+
- /* ua_output.c */
- void prtit(void *ctx, const char *msg);
- int complete_jcr_for_job(JCR *jcr, JOB *job, POOL *pool);
-diff -Naur org/bacula-2.0.0/src/dird/ua_purge.c bacula-2.0.0/src/dird/ua_purge.c
---- org/bacula-2.0.0/src/dird/ua_purge.c 2006-12-22 16:01:05.000000000 +0100
-+++ bacula-2.0.0/src/dird/ua_purge.c 2007-01-09 16:12:18.000000000 +0100
+diff -Naur --exclude=.svn --exclude='*~' bacula/src/dird/ua_purge.c bacula.new/src/dird/ua_purge.c
+--- bacula/src/dird/ua_purge.c 2007-02-16 09:53:51.000000000 +0100
++++ bacula.new/src/dird/ua_purge.c 2007-02-20 18:02:46.000000000 +0100
@@ -605,6 +605,18 @@
}
pm_strcpy(jcr->VolumeName, mr->VolumeName);
/* Send message to Job report, if it is a *real* job */
if (jcr && jcr->JobId > 0) {
Jmsg1(jcr, M_INFO, 0, _("All records pruned from Volume \"%s\"; marking it \"Purged\"\n"),
-diff -Naur org/bacula-2.0.0/src/dird/ua_update.c bacula-2.0.0/src/dird/ua_update.c
---- org/bacula-2.0.0/src/dird/ua_update.c 2006-12-23 17:33:52.000000000 +0100
-+++ bacula-2.0.0/src/dird/ua_update.c 2007-01-09 16:12:18.000000000 +0100
-@@ -290,7 +290,7 @@
- }
-
- /* Modify the Pool in which this Volume is located */
--static void update_vol_pool(UAContext *ua, char *val, MEDIA_DBR *mr, POOL_DBR *opr)
-+void update_vol_pool(UAContext *ua, char *val, MEDIA_DBR *mr, POOL_DBR *opr)
- {
- POOL_DBR pr;
- POOLMEM *query;