agent: Fix double free.
* agent/cache.c (agent_store_cache_hit): Make sure the update is atomic.
Previously, the function freed the last key, and duplicated the new
key after doing that. There is a chance, however, that calling the
allocator surrenders control to a different thread, causing a double
free if a different thread also calls this function.
To make sure the update is atomic under the non-preemptive thread
model, we must make sure not to surrender control to a different
thread. Therefore, we avoid calling the allocator during the
update.
- Signed-off-by: Justus Winter <justus@g10code.com>