]> git.sur5r.net Git - bacula/bacula/commitdiff
kes Remove redundant code in terminating the scheduler that just
authorKern Sibbald <kern@sibbald.com>
Fri, 11 Apr 2008 16:31:03 +0000 (16:31 +0000)
committerKern Sibbald <kern@sibbald.com>
Fri, 11 Apr 2008 16:31:03 +0000 (16:31 +0000)
     causes a seg fault in many cases.
kes  Cleanup releasing a volume and make it a DCR method.

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@6799 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/dird/scheduler.c
bacula/src/stored/dev.h
bacula/src/stored/dircmd.c
bacula/src/stored/mount.c
bacula/src/stored/protos.h
bacula/technotes-2.3

index 0e888a7c128708033949faa0443bed4205bc24a0..1949b2dc6580431a41331d4e1b0a8863bb8211c6 100644 (file)
@@ -118,6 +118,7 @@ JCR *wait_for_next_job(char *one_shot_job_to_run)
          return jcr;
       }
    }
+
    /* Wait until we have something in the
     * next hour or so.
     */
@@ -246,11 +247,6 @@ again:
 void term_scheduler()
 {
    if (jobs_to_run) {
-      job_item *je;
-      /* Release all queued job entries to be run */
-      foreach_dlist(je, jobs_to_run) {
-         free(je);
-      }
       delete jobs_to_run;
    }
 }
@@ -285,7 +281,7 @@ static void find_runs()
    woy = tm_woy(now);                     /* get week of year */
 
    Dmsg7(dbglvl, "now = %x: h=%d m=%d md=%d wd=%d wom=%d woy=%d\n",
-        now, hour, month, mday, wday, wom, woy);
+         now, hour, month, mday, wday, wom, woy);
 
    /*
     * Compute values for next hour from now.
@@ -303,7 +299,7 @@ static void find_runs()
    nh_woy = tm_woy(now);                     /* get week of year */
 
    Dmsg7(dbglvl, "nh = %x: h=%d m=%d md=%d wd=%d wom=%d woy=%d\n",
-        next_hour, nh_hour, nh_month, nh_mday, nh_wday, nh_wom, nh_woy);
+         next_hour, nh_hour, nh_month, nh_mday, nh_wday, nh_wom, nh_woy);
 
    /* Loop through all jobs */
    LockRes();
@@ -357,20 +353,20 @@ static void find_runs()
 
          Dmsg3(dbglvl, "run@%p: run_now=%d run_nh=%d\n", run, run_now, run_nh);
 
-        if (run_now || run_nh) {
-          /* find time (time_t) job is to be run */
-          (void)localtime_r(&now, &tm);      /* reset tm structure */
-          tm.tm_min = run->minute;     /* set run minute */
-          tm.tm_sec = 0;               /* zero secs */
-          runtime = mktime(&tm);
-          if (run_now) {
-            add_job(job, run, now, runtime);
-          }
-          /* If job is to be run in the next hour schedule it */
-          if (run_nh) {
-            add_job(job, run, now, runtime + 3600);
-          }
-        }
+         if (run_now || run_nh) {
+           /* find time (time_t) job is to be run */
+           (void)localtime_r(&now, &tm);      /* reset tm structure */
+           tm.tm_min = run->minute;     /* set run minute */
+           tm.tm_sec = 0;               /* zero secs */
+           runtime = mktime(&tm);
+           if (run_now) {
+             add_job(job, run, now, runtime);
+           }
+           /* If job is to be run in the next hour schedule it */
+           if (run_nh) {
+             add_job(job, run, now, runtime + 3600);
+           }
+         }
       }
    }
    UnlockRes();
index c57a49fcd210b3e0da9615b0f2b9d583db8979b0..edb13c7e39e06ba0d5e84728f389155119ded19b 100644 (file)
@@ -473,12 +473,14 @@ public:
 
    /* Methods in mount.c */
    bool mount_next_write_volume();
+   bool mount_next_read_volume();
    void mark_volume_in_error();
    void mark_volume_not_inchanger();
    int try_autolabel(bool opened);
    bool is_suitable_volume_mounted();
    bool is_eod_valid();
    int check_volume_label(bool &ask, bool &autochanger);
+   void release_volume();
 };
 
 /*
index a7b631a8311ab2b069c55360cc89a3acaab936ba..411d6687a369d7fd622b79417c907cf177bfe490 100644 (file)
@@ -915,7 +915,7 @@ static bool release_cmd(JCR *jcr)
          } else {                     /* device not being used */
             Dmsg0(90, "Device not in use, releaseing\n");
             unload_autochanger(dcr, -1);
-            release_volume(dcr);
+            dcr->release_volume();
             dir->fsend(_("3022 Device %s released.\n"), 
                dev->print_name());
          }
index 1edab43492ed3d598bff52ec9c00ef1e84782df7..4969a9bb7098c392852ee5c4b388bf271e711103 100644 (file)
@@ -102,8 +102,8 @@ mount_next_vol:
    recycle = false;
    if (unload_device) {
       Dmsg0(150, "mount_next_volume release=1\n");
-      release_volume(dcr);
       unload_autochanger(dcr, -1);
+      release_volume();
       unload_device = false;
       ask = true;                     /* ask operator to mount tape */
    }
@@ -636,11 +636,9 @@ void DCR::mark_volume_not_inchanger()
  * Either because we are going to hang a new volume, or because
  *  of explicit user request, we release the current volume.
  */
-void release_volume(DCR *dcr)
+void DCR::release_volume()
 {
-   JCR *jcr = dcr->jcr;
-   DEVICE *dev = dcr->dev;
-   if (dcr->WroteVol) {
+   if (WroteVol) {
       Jmsg0(jcr, M_ERROR, 0, _("Hey!!!!! WroteVol non-zero !!!!!\n"));
       Dmsg0(190, "Hey!!!!! WroteVol non-zero !!!!!\n");
    }
@@ -651,14 +649,14 @@ void release_volume(DCR *dcr)
    dev->block_num = dev->file = 0;
    dev->EndBlock = dev->EndFile = 0;
    memset(&dev->VolCatInfo, 0, sizeof(dev->VolCatInfo));
-// memset(&dcr->VolCatInfo, 0, sizeof(dcr->VolCatInfo));
+   memset(&VolCatInfo, 0, sizeof(VolCatInfo));
    dev->clear_volhdr();
    /* Force re-read of label */
    dev->clear_labeled();
    dev->clear_read();
    dev->clear_append();
    dev->label_type = B_BACULA_LABEL;
-// dcr->VolumeName[0] = 0;
+   VolumeName[0] = 0;
 
    if (dev->is_open() && (!dev->is_tape() || !dev->has_cap(CAP_ALWAYSOPEN))) {
       dev->close();
index 490355a3375fe2e1a6a0f197e5eda5b77493f07b..ef8ebc09f819a864c12f1e251805d2c4d91bdb6a 100644 (file)
@@ -218,7 +218,6 @@ void    _lock_reservations();
 void    _unlock_reservations();
 void    _lock_volumes();
 void    _unlock_volumes();
-void    release_volume(DCR *dcr);
 VOLRES *reserve_volume(DCR *dcr, const char *VolumeName);
 VOLRES *find_volume(const char *VolumeName);
 bool    free_volume(DEVICE *dev);
index fa0415574b80efcf79d3ccf749d8ac636f410d82..e19ebe7860c4ceaadcfbb0333305107329ba70b9 100644 (file)
@@ -25,6 +25,9 @@ Add long term statistics job table
 
 General:
 11Apr08
+kes  Remove redundant code in terminating the scheduler that just
+     causes a seg fault in many cases.
+kes  Cleanup releasing a volume and make it a DCR method.
 kes  Improve algorithm for detecting pre-reserved volume and
      swapping volumes.
 10Apr08