]> git.sur5r.net Git - bacula/bacula/commitdiff
Fix missing mempool allocate in voluseduration
authorKern Sibbald <kern@sibbald.com>
Mon, 7 Jul 2003 11:05:39 +0000 (11:05 +0000)
committerKern Sibbald <kern@sibbald.com>
Mon, 7 Jul 2003 11:05:39 +0000 (11:05 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@625 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/dird/ua_cmds.c
bacula/src/lib/mem_pool.c

index 51a853570691d66e9f40f7a9466adf07748188e4..243dc10c7b72ab320b7f17f817455903d88ad329 100644 (file)
@@ -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)) {
index 5d123b426ee6dc8f3d93f3ae74e9e11e6816ea5a..b1f849fef94345db8e53d70321e6d65701158c33 100644 (file)
@@ -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);
 }