Closed RichoDemus closed 5 years ago
This is because you're running Ubuntu Xenial.
Can you apply the following diff and let me know if it compiles for you?
diff --git a/src/isolate/holder.cc b/src/isolate/holder.cc
index f00796d..8b99920 100644
--- a/src/isolate/holder.cc
+++ b/src/isolate/holder.cc
@@ -1,7 +1,7 @@
#include "holder.h"
#include "environment.h"
#include "util.h"
-#include <atomic>
+#include <utility>
using std::shared_ptr;
using std::unique_ptr;
@@ -11,7 +11,11 @@ namespace ivm {
IsolateHolder::IsolateHolder(shared_ptr<IsolateEnvironment> isolate) : isolate(std::move(isolate)) {}
void IsolateHolder::Dispose() {
- shared_ptr<IsolateEnvironment> tmp = std::atomic_exchange(&isolate, shared_ptr<IsolateEnvironment>());
+ shared_ptr<IsolateEnvironment> tmp;
+ {
+ std::lock_guard<std::mutex> lock{mutex};
+ tmp = std::exchange(isolate, {});
+ }
if (tmp) {
tmp->Terminate();
tmp.reset();
@@ -21,11 +25,16 @@ void IsolateHolder::Dispose() {
}
shared_ptr<IsolateEnvironment> IsolateHolder::GetIsolate() {
- return std::atomic_load(&isolate);
+ std::lock_guard<std::mutex> lock{mutex};
+ return isolate;
}
void IsolateHolder::ScheduleTask(unique_ptr<Runnable> task, bool run_inline, bool wake_isolate, bool handle_task) {
- shared_ptr<IsolateEnvironment> ref = std::atomic_load(&isolate);
+ shared_ptr<IsolateEnvironment> ref;
+ {
+ std::lock_guard<std::mutex> lock{mutex};
+ ref = isolate;
+ }
if (ref) {
if (run_inline && IsolateEnvironment::GetCurrent() == ref.get()) {
task->Run();
diff --git a/src/isolate/holder.h b/src/isolate/holder.h
index e709201..4dd493c 100644
--- a/src/isolate/holder.h
+++ b/src/isolate/holder.h
@@ -1,5 +1,6 @@
#pragma once
#include "runnable.h"
+#include <mutex>
#include <memory>
namespace ivm {
@@ -9,6 +10,7 @@ class IsolateHolder {
friend class IsolateEnvironment;
private:
std::shared_ptr<IsolateEnvironment> isolate;
+ std::mutex mutex;
public:
explicit IsolateHolder(std::shared_ptr<IsolateEnvironment> isolate);
Hi, I'm trying to install isolated-vm on a google compute instance but it fails