summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Buchanan <jonathan.russ.buchanan@gmail.com>2022-07-19 00:49:12 -0400
committerJonathan Buchanan <jonathan.russ.buchanan@gmail.com>2022-07-19 00:49:12 -0400
commit2a43b45c68ddb5a798d7deeeb3fd879304002db6 (patch)
tree2755e5a15a622d358487a344dbe955035addc900
parent0c9c48e981549205587532bc17bcad251be1e437 (diff)
downloadiono-2a43b45c68ddb5a798d7deeeb3fd879304002db6.tar.gz
iono-2a43b45c68ddb5a798d7deeeb3fd879304002db6.tar.bz2
iono-2a43b45c68ddb5a798d7deeeb3fd879304002db6.zip
fix deallocation of iono
-rw-r--r--iono.xcodeproj/project.pbxproj22
-rw-r--r--iono/iono.cpp8
-rw-r--r--iono/iono.swift9
m---------ios-node-v80
4 files changed, 34 insertions, 5 deletions
diff --git a/iono.xcodeproj/project.pbxproj b/iono.xcodeproj/project.pbxproj
index f4d27b6..3ad2185 100644
--- a/iono.xcodeproj/project.pbxproj
+++ b/iono.xcodeproj/project.pbxproj
@@ -24,6 +24,8 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
+ AB27489328812D5400EA581D /* libbrotli.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libbrotli.a; path = "ios-node-v8/out-arm64/Debug/libbrotli.a"; sourceTree = "<group>"; };
+ AB27489528812D7A00EA581D /* libbrotli.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libbrotli.a; path = "ios-node-v8/out-x64/Debug/libbrotli.a"; sourceTree = "<group>"; };
D117861F268A4D8D00B63B20 /* libiono.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libiono.a; sourceTree = BUILT_PRODUCTS_DIR; };
D1178622268A4D8D00B63B20 /* iono.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iono.swift; sourceTree = "<group>"; };
D1178629268A4E6900B63B20 /* iono-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iono-Bridging-Header.h"; sourceTree = "<group>"; };
@@ -42,11 +44,21 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
+ AB27489228812D5400EA581D /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ AB27489528812D7A00EA581D /* libbrotli.a */,
+ AB27489328812D5400EA581D /* libbrotli.a */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
D1178616268A4D8D00B63B20 = {
isa = PBXGroup;
children = (
D1178621268A4D8D00B63B20 /* iono */,
D1178620268A4D8D00B63B20 /* Products */,
+ AB27489228812D5400EA581D /* Frameworks */,
);
sourceTree = "<group>";
};
@@ -279,6 +291,11 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/ios-node-v8/out-arm64/Debug",
+ "$(PROJECT_DIR)/ios-node-v8/out-x64/Debug",
+ );
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
@@ -299,6 +316,11 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/ios-node-v8/out-arm64/Debug",
+ "$(PROJECT_DIR)/ios-node-v8/out-x64/Debug",
+ );
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
diff --git a/iono/iono.cpp b/iono/iono.cpp
index 9a7d6e4..418f66b 100644
--- a/iono/iono.cpp
+++ b/iono/iono.cpp
@@ -32,8 +32,8 @@ std::map<std::string, std::string> modmap = std::map<std::string, std::string>()
struct __IonoInstance
{
/* Node/V8 */
- static std::unique_ptr<node::MultiIsolatePlatform> platform;
std::unique_ptr<node::CommonEnvironmentSetup> setup;
+ static std::unique_ptr<node::MultiIsolatePlatform> platform;
v8::Isolate *isolate;
node::Environment *env;
uv_loop_t *event_loop;
@@ -46,6 +46,8 @@ struct __IonoInstance
void *notification_userdata;
__IonoInstance();
+
+ ~__IonoInstance();
char *
evalJs(const char *js);
@@ -205,6 +207,10 @@ __IonoInstance::__IonoInstance() :
}
}
+__IonoInstance::~__IonoInstance() {
+ uv_close(reinterpret_cast<uv_handle_t *>(&async_notify), nullptr);
+}
+
char *
__IonoInstance::evalJs(const char *js)
{
diff --git a/iono/iono.swift b/iono/iono.swift
index 1f07140..95feb5b 100644
--- a/iono/iono.swift
+++ b/iono/iono.swift
@@ -16,7 +16,7 @@
import Foundation
-public protocol IonoMessageHandler {
+public protocol IonoMessageHandler: AnyObject {
func handleMessage(message: String)
}
@@ -48,7 +48,7 @@ struct Queue<T> {
}
class NodeThread: Thread {
- var iono: Iono!
+ weak var iono: Iono!
var workQueue: Queue<() -> ()>
var initialized: Bool
var initCondition: NSCondition
@@ -98,9 +98,9 @@ public class Iono {
var thread: NodeThread
var instance: OpaquePointer!
- public var messageHandler: IonoMessageHandler?
+ public weak var messageHandler: IonoMessageHandler?
- public init() { // We need to be calling runNode!
+ public init() {
self.stopped = false
self.thread = NodeThread()
self.thread.iono = self
@@ -179,6 +179,7 @@ public class Iono {
evalNodeCode(source: source)
}
+ /// Note: This *must* be called before releasing the object, or else the thread will keep going.
public func waitStopped() {
scheduleNodeThreadSync {
self.stopped = true
diff --git a/ios-node-v8 b/ios-node-v8
-Subproject b9509b499c9822229cdd6bda81b2c1e453259ec
+Subproject aaa00a74c8cd2afdd8205f6f0beecd1f94caafe