diff options
Diffstat (limited to 'source3/lib/gencache.c')
| -rw-r--r-- | source3/lib/gencache.c | 17 | 
1 files changed, 13 insertions, 4 deletions
diff --git a/source3/lib/gencache.c b/source3/lib/gencache.c index 2f603dbb2d..d3631b96ee 100644 --- a/source3/lib/gencache.c +++ b/source3/lib/gencache.c @@ -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;  | 
