From: Kern Sibbald Date: Mon, 29 Dec 2003 09:35:27 +0000 (+0000) Subject: Fix last_jobs list crash for utilities + fix sql_get.c select X-Git-Tag: Release-7.0.0~9773 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=3e48f55d935d864e04050e096ee9db2a36f6d3e4;p=bacula%2Fbacula Fix last_jobs list crash for utilities + fix sql_get.c select git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@963 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/src/cats/sql_get.c b/bacula/src/cats/sql_get.c index fdc5c7bb75..d4469845b8 100644 --- a/bacula/src/cats/sql_get.c +++ b/bacula/src/cats/sql_get.c @@ -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; diff --git a/bacula/src/lib/jcr.c b/bacula/src/lib/jcr.c index ff0573747b..f303f0d4fe 100755 --- a/bacula/src/lib/jcr.c +++ b/bacula/src/lib/jcr.c @@ -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()); diff --git a/bacula/src/stored/butil.c b/bacula/src/stored/butil.c index 6a1446582b..249a503c5c 100644 --- a/bacula/src/stored/butil.c +++ b/bacula/src/stored/butil.c @@ -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);