]> git.sur5r.net Git - bacula/bacula/commitdiff
Fix last_jobs list crash for utilities + fix sql_get.c select
authorKern Sibbald <kern@sibbald.com>
Mon, 29 Dec 2003 09:35:27 +0000 (09:35 +0000)
committerKern Sibbald <kern@sibbald.com>
Mon, 29 Dec 2003 09:35:27 +0000 (09:35 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@963 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/cats/sql_get.c
bacula/src/lib/jcr.c
bacula/src/stored/butil.c

index fdc5c7bb750d3ac5083554c31ec553a300d2b8dc..d4469845b8820ad388b7e0371e2d6c4a21c7b51c 100644 (file)
@@ -321,9 +321,9 @@ int db_get_job_volume_names(JCR *jcr, B_DB *mdb, uint32_t JobId, POOLMEM **Volum
 
    db_lock(mdb);
    Mmsg(&mdb->cmd, 
-        "SELECT VolumeName,JobMedia.VolIndex FROM JobMedia,Media WHERE "
-        "JobMedia.JobId=%u AND JobMedia.MediaId=Media.MediaId "
-        "ORDER BY JobMedia.VolIndex",  JobId);
+        "SELECT DISTINCT VolumeName FROM JobMedia,Media WHERE "
+        "JobMedia.JobId=%u AND JobMedia.MediaId=Media.MediaId ",
+       JobId);
 
    Dmsg1(130, "VolNam=%s\n", mdb->cmd);
    *VolumeNames[0] = 0;
index ff0573747b8600657ed8a5707bf60ac0ed9f3899..f303f0d4febd343e29f6b8aae23eb26663135a5d 100755 (executable)
@@ -39,7 +39,7 @@ static void timeout_handler(int sig);
 static void jcr_timeout_check(watchdog_t *self);
 
 struct s_last_job last_job;    /* last job run by this daemon */
-dlist *last_jobs;
+dlist *last_jobs = NULL;
 #define MAX_LAST_JOBS 10
 
 static JCR *jobs = NULL;             /* pointer to JCR chain */
@@ -50,16 +50,22 @@ static pthread_mutex_t jcr_chain_mutex = PTHREAD_MUTEX_INITIALIZER;
 void init_last_jobs_list()
 {
    struct s_last_job *job_entry;
-   last_jobs = new dlist(job_entry,  &job_entry->link);
-   memset(&last_job, 0, sizeof(last_job));
+   if (!last_jobs) {
+      last_jobs = new dlist(job_entry, &job_entry->link);
+      memset(&last_job, 0, sizeof(last_job));
+   }
 }
 
 void term_last_jobs_list()
 {
-   for (void *je=NULL; (je=last_jobs->next(je)); ) {
-      free(je);                    
+   char *je;
+   if (last_jobs) {
+      foreach_dlist(je, last_jobs) {
+        free(je);                     
+      }
+      delete last_jobs;
+      last_jobs = NULL;
    }
-   delete last_jobs;
 }
 
 void lock_last_jobs_list() 
@@ -247,6 +253,9 @@ void free_jcr(JCR *jcr)
    if (last_job.JobId > 0) {
       je = (struct s_last_job *)malloc(sizeof(struct s_last_job));
       memcpy((char *)je, (char *)&last_job, sizeof(last_job));
+      if (!last_jobs) {
+        init_last_jobs_list();
+      }
       last_jobs->append(je);
       if (last_jobs->size() > MAX_LAST_JOBS) {
         last_jobs->remove(last_jobs->first());
index 6a1446582b6b31d99959858710861edbc4b6d25e..249a503c5c5a82da9da8324c221222466aef1594 100644 (file)
@@ -219,8 +219,8 @@ JCR *setup_jcr(char *name, char *device, BSR *bsr, char *VolumeName)
    pm_strcpy(&jcr->fileset_name, "Dummy.fileset.name");
    jcr->fileset_md5 = get_pool_memory(PM_FNAME);
    pm_strcpy(&jcr->fileset_md5, "Dummy.fileset.md5");
-   jcr->JobId = 1;
-   jcr->JobType = JT_BACKUP;
+   jcr->JobId = 0;
+   jcr->JobType = JT_CONSOLE;
    jcr->JobLevel = L_FULL;
    jcr->JobStatus = JS_Terminated;
    jcr->dev_name = get_pool_memory(PM_FNAME);