X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fcats%2Fbvfs.c;h=ef3fad5c4d65bc3398342457b85764d495d55391;hb=d4c6aedf74b5d281aeed0482eb5e6e3ca668f243;hp=8a71ff5412c6476f823f21b064d8da783bc26ace;hpb=3e2f11db2e4159af276fbafd16d4e086150a776b;p=bacula%2Fbacula diff --git a/bacula/src/cats/bvfs.c b/bacula/src/cats/bvfs.c index 8a71ff5412..ef3fad5c4d 100644 --- a/bacula/src/cats/bvfs.c +++ b/bacula/src/cats/bvfs.c @@ -95,6 +95,9 @@ private: hlink *nodes; int nb_node; int max_node; + + alist *table_node; + htable *cache_ppathid; public: @@ -105,14 +108,17 @@ public: max_node = NITEMS; nodes = (hlink *) malloc(max_node * sizeof (hlink)); nb_node = 0; + table_node = New(alist(5, owned_by_alist)); + table_node->append(nodes); } hlink *get_hlink() { - if (nb_node >= max_node) { - max_node *= 2; - nodes = (hlink *)brealloc(nodes, sizeof(hlink) * max_node); + if (++nb_node >= max_node) { + nb_node = 0; + nodes = (hlink *)malloc(max_node * sizeof(hlink)); + table_node->append(nodes); } - return nodes + nb_node++; + return nodes + nb_node; } bool lookup(char *pathid) { @@ -128,7 +134,7 @@ public: ~pathid_cache() { cache_ppathid->destroy(); free(cache_ppathid); - free(nodes); + delete table_node; } private: pathid_cache(const pathid_cache &); /* prohibit pass by value */ @@ -412,7 +418,7 @@ void bvfs_update_cache(JCR *jcr, B_DB *mdb) Mmsg(mdb->cmd, "SELECT JobId from Job " - "WHERE HashCache = 0 " + "WHERE HasCache = 0 " "AND Type IN ('B') AND JobStatus IN ('T', 'f', 'A') " "ORDER BY JobId"); @@ -431,6 +437,7 @@ void bvfs_update_cache(JCR *jcr, B_DB *mdb) Dmsg1(dbglevel, "Affected row(s) = %d\n", nb); db_end_transaction(jcr, mdb); + db_unlock(mdb); } /* @@ -666,7 +673,7 @@ bool Bvfs::ls_files() if (*pattern) { Mmsg(filter, " AND Filename.Name %s '%s' ", SQL_MATCH, pattern); } - + /* TODO: Use JobTDate instead of FileId to determine the latest version */ POOL_MEM query; Mmsg(query, // 1 2 3 4 "SELECT 'F', File.PathId, File.FilenameId, listfiles.Name, File.JobId, "