X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fjournal%2Fmmap-cache.c;h=251aefe12113c3805583ab04a2cf9a0a9b48128d;hp=4be3f7e96608bcb947d27e13e7a7bc6a184d9f2f;hb=a2ab7ee6122a5006cafc45d7b81f726656fb65cc;hpb=f801968466fed39d50d410b30ac828c26722cc95 diff --git a/src/journal/mmap-cache.c b/src/journal/mmap-cache.c index 4be3f7e96..251aefe12 100644 --- a/src/journal/mmap-cache.c +++ b/src/journal/mmap-cache.c @@ -130,6 +130,7 @@ static void window_free(Window *w) { assert(w); window_unlink(w); + w->cache->n_windows--; free(w); } @@ -157,6 +158,7 @@ static Window *window_add(MMapCache *m) { w = new0(Window, 1); if (!w) return NULL; + m->n_windows++; } else { /* Reuse an existing one */ @@ -181,7 +183,7 @@ static void context_detach_window(Context *c) { c->window = NULL; LIST_REMOVE(Context, by_window, w->contexts, c); - if (!w->contexts) { + if (!w->contexts && !w->keep_always) { /* Not used anymore? */ LIST_PREPEND(Window, unused, c->cache->unused, w); if (!c->cache->last_unused) @@ -200,11 +202,11 @@ static void context_attach_window(Context *c, Window *w) { context_detach_window(c); - if (!w->contexts) { + if (w->in_unused) { /* Used again? */ LIST_REMOVE(Window, unused, c->cache->unused, w); - if (!c->cache->last_unused) - c->cache->last_unused = w; + if (c->cache->last_unused == w) + c->cache->last_unused = w->unused_prev; w->in_unused = false; }