From 04d313a2c7f4bf7f8492023501621a3d3c98db1c Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Thu, 6 Apr 2017 08:51:18 +0200 Subject: [PATCH] src: use std::list for at_exit_functions This change was suggested by bnoordhuis in the following comment: https://github.com/nodejs/node/pull/9163#discussion_r84264628 Not including any tests as this is covered by test/addons/at-exit. --- src/node.cc | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/src/node.cc b/src/node.cc index 619939d74dcf09..887cd62c36c702 100644 --- a/src/node.cc +++ b/src/node.cc @@ -84,6 +84,7 @@ #include #include +#include #if defined(NODE_HAVE_I18N_SUPPORT) #include @@ -4263,34 +4264,24 @@ void Init(int* argc, struct AtExitCallback { - AtExitCallback* next_; void (*cb_)(void* arg); void* arg_; }; -static AtExitCallback* at_exit_functions_; +static std::list at_exit_functions; // TODO(bnoordhuis) Turn into per-context event. void RunAtExit(Environment* env) { - AtExitCallback* p = at_exit_functions_; - at_exit_functions_ = nullptr; - - while (p) { - AtExitCallback* q = p->next_; - p->cb_(p->arg_); - delete p; - p = q; + for (AtExitCallback at_exit : at_exit_functions) { + at_exit.cb_(at_exit.arg_); } + at_exit_functions.clear(); } void AtExit(void (*cb)(void* arg), void* arg) { - AtExitCallback* p = new AtExitCallback; - p->cb_ = cb; - p->arg_ = arg; - p->next_ = at_exit_functions_; - at_exit_functions_ = p; + at_exit_functions.push_back(AtExitCallback{cb, arg}); }