73 lines
		
	
	
	
		
			3 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
	
		
			3 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 | 
						|
From: Tyler Ang-Wanek <tylerw@axosoft.com>
 | 
						|
Date: Tue, 19 Jan 2021 07:39:14 -0700
 | 
						|
Subject: src: inline AsyncCleanupHookHandle in headers
 | 
						|
 | 
						|
Fixes: https://github.com/nodejs/node/issues/36349
 | 
						|
 | 
						|
PR-URL: https://github.com/nodejs/node/pull/37000
 | 
						|
Reviewed-By: Anna Henningsen <anna@addaleax.net>
 | 
						|
Reviewed-By: Rich Trott <rtrott@gmail.com>
 | 
						|
Reviewed-By: James M Snell <jasnell@gmail.com>
 | 
						|
 | 
						|
diff --git a/src/api/hooks.cc b/src/api/hooks.cc
 | 
						|
index a719a861dbe9d8d9ca67c3bb5920b14b0df16d83..8f191aad7e2dcfbedddeaeb88f47ed721ef51cf1 100644
 | 
						|
--- a/src/api/hooks.cc
 | 
						|
+++ b/src/api/hooks.cc
 | 
						|
@@ -133,7 +133,7 @@ static void RunAsyncCleanupHook(void* arg) {
 | 
						|
   info->fun(info->arg, FinishAsyncCleanupHook, info);
 | 
						|
 }
 | 
						|
 
 | 
						|
-AsyncCleanupHookHandle AddEnvironmentCleanupHook(
 | 
						|
+ACHHandle* AddEnvironmentCleanupHookInternal(
 | 
						|
     Isolate* isolate,
 | 
						|
     AsyncCleanupHook fun,
 | 
						|
     void* arg) {
 | 
						|
@@ -145,11 +145,11 @@ AsyncCleanupHookHandle AddEnvironmentCleanupHook(
 | 
						|
   info->arg = arg;
 | 
						|
   info->self = info;
 | 
						|
   env->AddCleanupHook(RunAsyncCleanupHook, info.get());
 | 
						|
-  return AsyncCleanupHookHandle(new ACHHandle { info });
 | 
						|
+  return new ACHHandle { info };
 | 
						|
 }
 | 
						|
 
 | 
						|
-void RemoveEnvironmentCleanupHook(
 | 
						|
-    AsyncCleanupHookHandle handle) {
 | 
						|
+void RemoveEnvironmentCleanupHookInternal(
 | 
						|
+    ACHHandle* handle) {
 | 
						|
   if (handle->info->started) return;
 | 
						|
   handle->info->self.reset();
 | 
						|
   handle->info->env->RemoveCleanupHook(RunAsyncCleanupHook, handle->info.get());
 | 
						|
diff --git a/src/node.h b/src/node.h
 | 
						|
index f150725b54ee1315476d202797963369490d5152..7ab2ed9345c83cb4c1f51c0cc3050abc6571e3fa 100644
 | 
						|
--- a/src/node.h
 | 
						|
+++ b/src/node.h
 | 
						|
@@ -905,12 +905,26 @@ struct ACHHandle;
 | 
						|
 struct NODE_EXTERN DeleteACHHandle { void operator()(ACHHandle*) const; };
 | 
						|
 typedef std::unique_ptr<ACHHandle, DeleteACHHandle> AsyncCleanupHookHandle;
 | 
						|
 
 | 
						|
-NODE_EXTERN AsyncCleanupHookHandle AddEnvironmentCleanupHook(
 | 
						|
+/* This function is not intended to be used externally, it exists to aid in
 | 
						|
+ * keeping ABI compatibility between Node and Electron. */
 | 
						|
+NODE_EXTERN ACHHandle* AddEnvironmentCleanupHookInternal(
 | 
						|
     v8::Isolate* isolate,
 | 
						|
     void (*fun)(void* arg, void (*cb)(void*), void* cbarg),
 | 
						|
     void* arg);
 | 
						|
+inline AsyncCleanupHookHandle AddEnvironmentCleanupHook(
 | 
						|
+    v8::Isolate* isolate,
 | 
						|
+    void (*fun)(void* arg, void (*cb)(void*), void* cbarg),
 | 
						|
+    void* arg) {
 | 
						|
+  return AsyncCleanupHookHandle(AddEnvironmentCleanupHookInternal(isolate, fun,
 | 
						|
+      arg));
 | 
						|
+}
 | 
						|
 
 | 
						|
-NODE_EXTERN void RemoveEnvironmentCleanupHook(AsyncCleanupHookHandle holder);
 | 
						|
+/* This function is not intended to be used externally, it exists to aid in
 | 
						|
+ * keeping ABI compatibility between Node and Electron. */
 | 
						|
+NODE_EXTERN void RemoveEnvironmentCleanupHookInternal(ACHHandle* holder);
 | 
						|
+inline void RemoveEnvironmentCleanupHook(AsyncCleanupHookHandle holder) {
 | 
						|
+  RemoveEnvironmentCleanupHookInternal(holder.get());
 | 
						|
+}
 | 
						|
 
 | 
						|
 /* Returns the id of the current execution context. If the return value is
 | 
						|
  * zero then no execution has been set. This will happen if the user handles
 |