s3:gencache: Make gencache_del() return success for expired entries
authorVolker Lendecke <vl@samba.org>
Wed, 23 Sep 2009 13:47:05 +0000 (15:47 +0200)
committerMichael Adam <obnox@samba.org>
Wed, 10 Mar 2010 12:22:07 +0000 (13:22 +0100)
This fixes nasty error messages from "net cache flush"

source3/lib/gencache.c

index 2f603dbb2d677e67cdf83106d4a6a6699d260cd2..d3631b96eea62adbf116526dae40cc14737da95a 100644 (file)
@@ -208,9 +208,9 @@ done:
 
 bool gencache_del(const char *keystr)
 {
-       bool exists;
+       bool exists, was_expired;
        bool ret = false;
-       char *value;
+       DATA_BLOB value;
 
        if (keystr == NULL) {
                return false;
@@ -226,9 +226,18 @@ bool gencache_del(const char *keystr)
         * element.
         */
 
-       exists = gencache_get(keystr, &value, NULL);
+       exists = gencache_get_data_blob(keystr, &value, NULL, &was_expired);
+
+       if (!exists && was_expired) {
+               /*
+                * gencache_get_data_blob has implicitly deleted this
+                * entry, so we have to return success here.
+                */
+               return true;
+       }
+
        if (exists) {
-               SAFE_FREE(value);
+               data_blob_free(&value);
                ret = gencache_set(keystr, "", 0);
        }
        return ret;