]> git.sur5r.net Git - bacula/bacula/commitdiff
Fix bug #1853: bacula-sd dead but pid file exists.
authorMarco van Wieringen <mvw@planets.elm.net>
Wed, 28 Mar 2012 16:33:14 +0000 (18:33 +0200)
committerKern Sibbald <kern@sibbald.com>
Sat, 20 Apr 2013 12:50:33 +0000 (14:50 +0200)
We scanned using a %d pattern into a bool value. On some
platforms (SPARC) this gives a severe SIGBUS e.g. bus error
as the sizeof(bool) on 64 bits is 1 byte and the %d uses an
integer value which is 4 bytes. Its obvious now we know this
problem that its an problem on other platforms too but it
seems only on SPARC it triggers a hardware error by the CPU.

The workaround is to use a temporary variable and set the
bool to either true or false based on the integer value.

bacula/src/stored/job.c

index 8be2b4e201eea18ce761c1cad355019b6f9dc5af..7fabf57785b0a0dc81ce944fccdaa984f80c5525 100644 (file)
@@ -74,7 +74,7 @@ bool job_cmd(JCR *jcr)
    BSOCK *dir = jcr->dir_bsock;
    POOL_MEM job_name, client_name, job, fileset_name, fileset_md5;
    int32_t JobType, level, spool_attributes, no_attributes, spool_data;
-   int32_t write_part_after_job, PreferMountedVols;
+   int32_t write_part_after_job, PreferMountedVols, rerunning;
    int stat;
    JCR *ojcr;
 
@@ -88,7 +88,7 @@ bool job_cmd(JCR *jcr)
               &JobType, &level, fileset_name.c_str(), &no_attributes,
               &spool_attributes, fileset_md5.c_str(), &spool_data,
               &write_part_after_job, &PreferMountedVols, spool_size,
-              &jcr->rerunning, &jcr->VolSessionId, &jcr->VolSessionTime);
+              &rerunning, &jcr->VolSessionId, &jcr->VolSessionTime);
    if (stat != 17) {
       pm_strcpy(jcr->errmsg, dir->msg);
       dir->fsend(BAD_job, stat, jcr->errmsg);
@@ -96,6 +96,7 @@ bool job_cmd(JCR *jcr)
       jcr->setJobStatus(JS_ErrorTerminated);
       return false;
    }
+   jcr->rerunning = (rerunning) ? true : false;
    Dmsg3(100, "==== rerunning=%d VolSesId=%d VolSesTime=%d\n", jcr->rerunning,
          jcr->VolSessionId, jcr->VolSessionTime);
    /*