From: Kern Sibbald Date: Sun, 18 Jul 2004 16:05:07 +0000 (+0000) Subject: Misc X-Git-Tag: Release-1.35.1~52 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=35c197470a3ec03c3083cd4432c4a3e4b96837c6;p=bacula%2Fbacula Misc git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@1482 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/src/lib/bsys.c b/bacula/src/lib/bsys.c index ff4cdd543a..a375d728ac 100644 --- a/bacula/src/lib/bsys.c +++ b/bacula/src/lib/bsys.c @@ -110,34 +110,13 @@ void *bcalloc (size_t size1, size_t size2) */ int bsnprintf(char *str, int32_t size, const char *fmt, ...) { -#ifdef HAVE_VSNPRINTF - va_list arg_ptr; - int len; - - va_start(arg_ptr, fmt); - len = vsnprintf(str, size, fmt, arg_ptr); - va_end(arg_ptr); - str[size-1] = 0; - return len; - -#else - va_list arg_ptr; int len; - char *buf; - buf = get_memory(BIG_BUF); va_start(arg_ptr, fmt); - len = vsprintf(buf, fmt, arg_ptr); + len = bvsnprintf(str, size, fmt, arg_ptr); va_end(arg_ptr); - if (len >= BIG_BUF) { - Emsg0(M_ABORT, 0, _("Buffer overflow.\n")); - } - memcpy(str, buf, size); - str[size-1] = 0; - free_memory(buf); return len; -#endif } /* diff --git a/bacula/src/lib/edit.c b/bacula/src/lib/edit.c index 10b3e5a9e5..a420656eb4 100644 --- a/bacula/src/lib/edit.c +++ b/bacula/src/lib/edit.c @@ -77,7 +77,6 @@ int64_t str_to_int64(char *str) } - /* * Edit an integer number with commas, the supplied buffer * must be at least 27 bytes long. The incoming number @@ -85,7 +84,21 @@ int64_t str_to_int64(char *str) */ char *edit_uint64_with_commas(uint64_t val, char *buf) { - sprintf(buf, "%" llu, val); + /* + * Replacement for sprintf(buf, "%" llu, val) + */ + char mbuf[50]; + mbuf[sizeof(mbuf)-1] = 0; + int i = sizeof(mbuf)-2; /* edit backward */ + if (val == 0) { + mbuf[i--] = '0'; + } else { + while (val != 0) { + mbuf[i--] = "0123456789"[val%10]; + val /= 10; + } + } + strcpy(buf, &mbuf[i+1]); return add_commas(buf, buf); } @@ -96,7 +109,21 @@ char *edit_uint64_with_commas(uint64_t val, char *buf) */ char *edit_uint64(uint64_t val, char *buf) { - sprintf(buf, "%" llu, val); + /* + * Replacement for sprintf(buf, "%" llu, val) + */ + char mbuf[50]; + mbuf[sizeof(mbuf)-1] = 0; + int i = sizeof(mbuf)-2; /* edit backward */ + if (val == 0) { + mbuf[i--] = '0'; + } else { + while (val != 0) { + mbuf[i--] = "0123456789"[val%10]; + val /= 10; + } + } + strcpy(buf, &mbuf[i+1]); return buf; } diff --git a/bacula/src/stored/acquire.c b/bacula/src/stored/acquire.c index a1b2d5458a..e1fe5acfab 100644 --- a/bacula/src/stored/acquire.c +++ b/bacula/src/stored/acquire.c @@ -46,13 +46,22 @@ DCR *new_dcr(JCR *jcr, DEVICE *dev) dcr->rec = new_record(); dcr->spool_fd = -1; dcr->max_spool_size = dev->device->max_spool_size; -// dev->attached_dcrs->append(dcr); + /* Attach this dcr only if dev is initialized */ + if (dev->fd != 0 && jcr && jcr->JobType != JT_SYSTEM) { + dev->attached_dcrs->append(dcr); + } return dcr; } void free_dcr(DCR *dcr) { -// dcr->dev->attached_dcrs->remove(dcr); + JCR *jcr = dcr->jcr; + DEVICE *dev = dcr->dev; + + /* Detach this dcr only if the dev is initialized */ + if (dev->fd != 0 && jcr && jcr->JobType != JT_SYSTEM) { + dcr->dev->attached_dcrs->remove(dcr); + } if (dcr->block) { free_block(dcr->block); } diff --git a/bacula/src/stored/bcopy.c b/bacula/src/stored/bcopy.c index 29e2c9e483..c212fe67fc 100644 --- a/bacula/src/stored/bcopy.c +++ b/bacula/src/stored/bcopy.c @@ -175,10 +175,11 @@ int main (int argc, char *argv[]) Pmsg2(000, _("%u Jobs copied. %u records copied.\n"), jobs, records); - term_dev(in_dev); - term_dev(out_dev); free_jcr(in_jcr); free_jcr(out_jcr); + + term_dev(in_dev); + term_dev(out_dev); return 0; } diff --git a/bacula/src/stored/bextract.c b/bacula/src/stored/bextract.c index d68bd73be8..0334f3f91f 100644 --- a/bacula/src/stored/bextract.c +++ b/bacula/src/stored/bextract.c @@ -230,10 +230,10 @@ static void do_extract(char *devname) set_attributes(jcr, attr, &bfd); } release_device(jcr); - free_attr(attr); - term_dev(dev); free_jcr(jcr); + term_dev(dev); + printf("%u files restored.\n", num_files); return; } diff --git a/bacula/src/stored/bls.c b/bacula/src/stored/bls.c index 65e3a2a13a..34b879e1d7 100644 --- a/bacula/src/stored/bls.c +++ b/bacula/src/stored/bls.c @@ -240,10 +240,10 @@ static void do_close(JCR *jcr) { release_device(jcr); free_attr(attr); - term_dev(dev); free_record(rec); free_block(block); free_jcr(jcr); + term_dev(dev); } diff --git a/bacula/src/stored/bscan.c b/bacula/src/stored/bscan.c index add9076726..cea25ce223 100644 --- a/bacula/src/stored/bscan.c +++ b/bacula/src/stored/bscan.c @@ -266,6 +266,7 @@ int main (int argc, char *argv[]) num_media, num_pools, num_jobs, num_files); free_jcr(bjcr); + term_dev(dev); return 0; } @@ -322,7 +323,6 @@ static void do_scan() release_device(bjcr); free_attr(attr); - term_dev(dev); } /* diff --git a/bacula/src/stored/btape.c b/bacula/src/stored/btape.c index 8f0199565d..ee168b41e5 100644 --- a/bacula/src/stored/btape.c +++ b/bacula/src/stored/btape.c @@ -266,20 +266,20 @@ static void terminate_btape(int stat) cmd = NULL; } - if (dev) { - term_dev(dev); + if (bsr) { + free_bsr(bsr); } - if (debug_level > 10) - print_memory_pool_stats(); - free_jcr(jcr); jcr = NULL; - if (bsr) { - free_bsr(bsr); + if (dev) { + term_dev(dev); } + if (debug_level > 10) + print_memory_pool_stats(); + if (this_block) { free_block(this_block); } diff --git a/bacula/src/stored/dev.c b/bacula/src/stored/dev.c index d3253f5eab..05028004c7 100644 --- a/bacula/src/stored/dev.c +++ b/bacula/src/stored/dev.c @@ -197,13 +197,11 @@ init_dev(DEVICE *dev, DEVRES *device) Mmsg1(&dev->errmsg, _("Unable to init mutex: ERR=%s\n"), strerror(errstat)); Emsg0(M_FATAL, 0, dev->errmsg); } -#ifdef xxx if ((errstat = rwl_init(&dev->lock)) != 0) { dev->dev_errno = errstat; Mmsg1(&dev->errmsg, _("Unable to init mutex: ERR=%s\n"), strerror(errstat)); Emsg0(M_FATAL, 0, dev->errmsg); } -#endif dev->fd = -1; dev->attached_dcrs = new dlist(dcr, &dcr->dev_link); @@ -1405,6 +1403,7 @@ term_dev(DEVICE *dev) pthread_cond_destroy(&dev->wait); pthread_cond_destroy(&dev->wait_next_vol); pthread_mutex_destroy(&dev->spool_mutex); + rwl_destroy(&dev->lock); if (dev->attached_dcrs) { delete dev->attached_dcrs; dev->attached_dcrs = NULL; diff --git a/bacula/src/stored/spool.c b/bacula/src/stored/spool.c index 0267c248d3..0dd49a36d4 100644 --- a/bacula/src/stored/spool.c +++ b/bacula/src/stored/spool.c @@ -184,6 +184,8 @@ static bool close_data_spool_file(JCR *jcr) return true; } +static const char *spool_name = "*spool*"; + static bool despool_data(DCR *dcr, bool commit) { DEVICE *rdev; @@ -202,11 +204,15 @@ static bool despool_data(DCR *dcr, bool commit) lock_device(dcr->dev); dcr->dev_locked = true; - /* Setup a dev structure to read */ + /* + * This is really quite kludgy and should be fixed some time. + * We create a dev structure to read from the spool file + * in rdev and rdcr. + */ rdev = (DEVICE *)malloc(sizeof(DEVICE)); memset(rdev, 0, sizeof(DEVICE)); - rdev->dev_name = get_memory(strlen("spool")+1); - strcpy(rdev->dev_name, "spool"); + rdev->dev_name = get_memory(strlen(spool_name)+1); + strcpy(rdev->dev_name, spool_name); rdev->errmsg = get_pool_memory(PM_EMSG); *rdev->errmsg = 0; rdev->max_block_size = dcr->dev->max_block_size; @@ -216,6 +222,7 @@ static bool despool_data(DCR *dcr, bool commit) rdcr->spool_fd = dcr->spool_fd; rdcr->jcr = jcr; /* set a valid jcr */ block = rdcr->block; + Dmsg1(800, "read/write block size = %d\n", block->buf_len); lseek(rdcr->spool_fd, 0, SEEK_SET); /* rewind */ @@ -256,9 +263,10 @@ static bool despool_data(DCR *dcr, bool commit) V(dcr->dev->spool_mutex); free_memory(rdev->dev_name); free_pool_memory(rdev->errmsg); - free(rdev); + /* Be careful to NULL the jcr and free rdev after free_dcr() */ rdcr->jcr = NULL; free_dcr(rdcr); + free(rdev); unlock_device(dcr->dev); dcr->dev_locked = false; dcr->spooling = true; /* turn on spooling again */ diff --git a/bacula/src/version.h b/bacula/src/version.h index af92258e60..2c8ff5b773 100644 --- a/bacula/src/version.h +++ b/bacula/src/version.h @@ -1,9 +1,8 @@ /* */ #undef VERSION #define VERSION "1.35.1" -#define VSTRING "1" -#define BDATE "17 July 2004" -#define LSMDATE "17Jul04" +#define BDATE "18 July 2004" +#define LSMDATE "18Jul04" /* Debug flags */ #undef DEBUG