]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Misc allocator fixes
authorMaria Matejka <mq@ucw.cz>
Tue, 28 Feb 2023 14:23:48 +0000 (15:23 +0100)
committerMaria Matejka <mq@ucw.cz>
Tue, 4 Apr 2023 15:00:59 +0000 (17:00 +0200)
sysdep/unix/alloc.c
sysdep/unix/main.c

index 8bd3770d75c5e66f1b38ca1b19d5189f9c7f7900..cafcc8dd4c7a9a5001faef10ff38d317d4ea9bb9 100644 (file)
@@ -118,6 +118,8 @@ alloc_page(void)
     return fp;
   }
 
+  ASSERT_DIE(pages_kept_here == 0);
+
   /* If there is any free page kept hot in global storage, we use it. */
   rcu_read_lock();
   fp = atomic_load_explicit(&page_stack, memory_order_acquire);
@@ -176,6 +178,8 @@ free_page(void *ptr)
   if (shutting_down || (pages_kept_here < KEEP_PAGES_MAX_LOCAL))
   {
     atomic_store_explicit(&fp->next, local_page_stack, memory_order_relaxed);
+    local_page_stack = fp;
+
     atomic_fetch_add_explicit(&pages_kept_locally, 1, memory_order_relaxed);
     pages_kept_here++;
     return;
index 1ed57a997846fd397aee88bd53c80bb743061eb7..ab076af6642d64912e6c0c184d75703856cb7ce3 100644 (file)
@@ -935,6 +935,8 @@ main(int argc, char **argv)
   if (parse_and_exit)
     exit(0);
 
+  flush_local_pages();
+
   if (!run_in_foreground)
     {
       pid_t pid = fork();