From: Kern Sibbald Date: Mon, 7 Jul 2003 11:05:39 +0000 (+0000) Subject: Fix missing mempool allocate in voluseduration X-Git-Tag: Release-1.31~31 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=53ce66db11d5b4dfeb8bc755ae7351067f248fe2;p=bacula%2Fbacula Fix missing mempool allocate in voluseduration git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@625 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/src/dird/ua_cmds.c b/bacula/src/dird/ua_cmds.c index 51a8535706..243dc10c7b 100644 --- a/bacula/src/dird/ua_cmds.c +++ b/bacula/src/dird/ua_cmds.c @@ -694,6 +694,7 @@ static void update_voluseduration(UAContext *ua, char *val, MEDIA_DBR *mr) bsendmsg(ua, _("Invalid use duration specified: %s\n"), val); return; } + query = get_pool_memory(PM_MESSAGE); Mmsg(&query, "UPDATE Media SET VolUseDuration=%s WHERE MediaId=%u", edit_uint64(mr->VolUseDuration, ed1), mr->MediaId); if (!db_sql_query(ua->db, query, NULL, NULL)) { @@ -789,13 +790,13 @@ static int update_volume(UAContext *ua) char ed1[30]; bool done = false; char *kw[] = { - N_("VolStatus"), - N_("VolRetention"), - N_("VolUse"), - N_("MaxVolJobs"), - N_("MaxVolFiles"), - N_("MaxVolBytes"), - N_("Recycle"), + N_("VolStatus"), /* 0 */ + N_("VolRetention"), /* 1 */ + N_("VolUse"), /* 2 */ + N_("MaxVolJobs"), /* 3 */ + N_("MaxVolFiles"), /* 4 */ + N_("MaxVolBytes"), /* 5 */ + N_("Recycle"), /* 6 */ NULL }; if (!select_media_dbr(ua, &mr)) { diff --git a/bacula/src/lib/mem_pool.c b/bacula/src/lib/mem_pool.c index 5d123b426e..b1f849fef9 100644 --- a/bacula/src/lib/mem_pool.c +++ b/bacula/src/lib/mem_pool.c @@ -108,12 +108,12 @@ POOLMEM *sm_get_pool_memory(char *fname, int lineno, int pool) pool_ctl[pool].max_used = pool_ctl[pool].in_use; } V(mutex); - Dmsg3(150, "sm_get_pool_memory reuse %x to %s:%d\n", buf, fname, lineno); + Dmsg3(300, "sm_get_pool_memory reuse %x to %s:%d\n", buf, fname, lineno); sm_new_owner(fname, lineno, (char *)buf); return (POOLMEM *)((char *)buf+HEAD_SIZE); } - if ((buf = (struct abufhead *) sm_malloc(fname, lineno, pool_ctl[pool].size+HEAD_SIZE)) == NULL) { + if ((buf = (struct abufhead *)sm_malloc(fname, lineno, pool_ctl[pool].size+HEAD_SIZE)) == NULL) { V(mutex); Emsg1(M_ABORT, 0, "Out of memory requesting %d bytes\n", pool_ctl[pool].size); } @@ -124,7 +124,7 @@ POOLMEM *sm_get_pool_memory(char *fname, int lineno, int pool) pool_ctl[pool].max_used = pool_ctl[pool].in_use; } V(mutex); - Dmsg3(150, "sm_get_pool_memory give %x to %s:%d\n", buf, fname, lineno); + Dmsg3(300, "sm_get_pool_memory give %x to %s:%d\n", buf, fname, lineno); return (POOLMEM *)((char *)buf+HEAD_SIZE); } @@ -208,13 +208,17 @@ void sm_free_pool_memory(char *fname, int lineno, POOLMEM *obuf) struct abufhead *next; /* Don't let him free the same buffer twice */ for (next=pool_ctl[pool].free_buf; next; next=next->next) { - ASSERT(next != buf); /* attempt to free twice */ + if (next == buf) { + Dmsg4(300, "bad free_pool_memory %x pool=%d from %s:%d\n", buf, pool, fname, lineno); + V(mutex); /* unblock the pool */ + ASSERT(next != buf); /* attempt to free twice */ + } } #endif buf->next = pool_ctl[pool].free_buf; pool_ctl[pool].free_buf = buf; } - Dmsg2(150, "free_pool_memory %x pool=%d\n", buf, pool); + Dmsg4(300, "free_pool_memory %x pool=%d from %s:%d\n", buf, pool, fname, lineno); V(mutex); } @@ -331,13 +335,16 @@ void free_pool_memory(POOLMEM *obuf) struct abufhead *next; /* Don't let him free the same buffer twice */ for (next=pool_ctl[pool].free_buf; next; next=next->next) { - ASSERT(next != buf); /* attempt to free twice */ + if (next == buf) { + V(mutex); + ASSERT(next != buf); /* attempt to free twice */ + } } #endif buf->next = pool_ctl[pool].free_buf; pool_ctl[pool].free_buf = buf; } - Dmsg2(150, "free_pool_memory %x pool=%d\n", buf, pool); + Dmsg2(300, "free_pool_memory %x pool=%d\n", buf, pool); V(mutex); }