Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
src: add consistency check to node_platform.cc
We use the `Isolate*` pointer as the sole identifier
for a V8 Isolate. In some environments (e.g. multi-threaded),
Isolates may be destroyed and new ones created; then, it
may happen that the memory that was previously used for
one `Isolate` can be re-used for another `Isolate`
after the first one has been disposed of.

This check is a little guard against accidentally
re-using the same per-Isolate platform data structure
in such cases, i.e. making sure (to the degree to which
that is possible) that the old `Isolate*` has been properly
unregistered before one at the same memory address is added.

(It’s not 100 % foolproof because the `uv_loop_t*`
pointer value could theoretically be the same as well.)
  • Loading branch information
addaleax committed Jun 5, 2018
commit b95072884cc0ea6a9ddfe759516052e26f770db3
1 change: 1 addition & 0 deletions src/node_platform.cc
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ void NodePlatform::RegisterIsolate(IsolateData* isolate_data, uv_loop_t* loop) {
Mutex::ScopedLock lock(per_isolate_mutex_);
std::shared_ptr<PerIsolatePlatformData> existing = per_isolate_[isolate];
if (existing) {
CHECK_EQ(loop, existing->event_loop());
existing->ref();
} else {
per_isolate_[isolate] =
Expand Down
2 changes: 2 additions & 0 deletions src/node_platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ class PerIsolatePlatformData :
bool FlushForegroundTasksInternal();
void CancelPendingDelayedTasks();

uv_loop_t* event_loop() { return loop_; }
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

const?


private:
void DeleteFromScheduledTasks(DelayedTask* task);

Expand Down