modif comtabilite
This commit is contained in:
+53
-12
@@ -13,7 +13,7 @@
|
||||
*
|
||||
* MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
|
||||
*
|
||||
* Version 2.10.0: current Node 9.8.0, Node 12: 0.12.18, Node 10: 0.10.48, iojs: 3.3.1
|
||||
* Version 2.11.1: current Node 10.11.0, Node 12: 0.12.18, Node 10: 0.10.48, iojs: 3.3.1
|
||||
*
|
||||
* See https://github.com/nodejs/nan for the latest update to this file
|
||||
**********************************************************************************/
|
||||
@@ -36,6 +36,7 @@
|
||||
#define NODE_7_0_MODULE_VERSION 51
|
||||
#define NODE_8_0_MODULE_VERSION 57
|
||||
#define NODE_9_0_MODULE_VERSION 59
|
||||
#define NODE_10_0_MODULE_VERSION 64
|
||||
|
||||
#ifdef _MSC_VER
|
||||
# define NAN_HAS_CPLUSPLUS_11 (_MSC_VER >= 1800)
|
||||
@@ -91,6 +92,9 @@
|
||||
|
||||
namespace Nan {
|
||||
|
||||
#define NAN_CONCAT(a, b) NAN_CONCAT_HELPER(a, b)
|
||||
#define NAN_CONCAT_HELPER(a, b) a##b
|
||||
|
||||
#define NAN_INLINE inline // TODO(bnoordhuis) Remove in v3.0.0.
|
||||
|
||||
#if defined(__GNUC__) && \
|
||||
@@ -148,6 +152,21 @@ namespace Nan {
|
||||
#define NAN_MODULE_INIT(name) \
|
||||
void name(Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE target)
|
||||
|
||||
#if NODE_MAJOR_VERSION >= 10 || \
|
||||
NODE_MAJOR_VERSION == 9 && NODE_MINOR_VERSION >= 3
|
||||
#define NAN_MODULE_WORKER_ENABLED(module_name, registration) \
|
||||
extern "C" NODE_MODULE_EXPORT void \
|
||||
NAN_CONCAT(node_register_module_v, NODE_MODULE_VERSION)( \
|
||||
v8::Local<v8::Object> exports, v8::Local<v8::Value> module, \
|
||||
v8::Local<v8::Context> context) \
|
||||
{ \
|
||||
registration(exports); \
|
||||
}
|
||||
#else
|
||||
#define NAN_MODULE_WORKER_ENABLED(module_name, registration) \
|
||||
NODE_MODULE(module_name, registration)
|
||||
#endif
|
||||
|
||||
//=== CallbackInfo =============================================================
|
||||
|
||||
#include "nan_callbacks.h" // NOLINT(build/include)
|
||||
@@ -560,6 +579,16 @@ class AsyncResource {
|
||||
#endif
|
||||
};
|
||||
|
||||
inline uv_loop_t* GetCurrentEventLoop() {
|
||||
#if NODE_MAJOR_VERSION >= 10 || \
|
||||
NODE_MAJOR_VERSION == 9 && NODE_MINOR_VERSION >= 3 || \
|
||||
NODE_MAJOR_VERSION == 8 && NODE_MINOR_VERSION >= 10
|
||||
return node::GetCurrentEventLoop(v8::Isolate::GetCurrent());
|
||||
#else
|
||||
return uv_default_loop();
|
||||
#endif
|
||||
}
|
||||
|
||||
//============ =================================================================
|
||||
|
||||
/* node 0.12 */
|
||||
@@ -1031,7 +1060,11 @@ class Utf8String {
|
||||
length_(0), str_(str_st_) {
|
||||
HandleScope scope;
|
||||
if (!from.IsEmpty()) {
|
||||
#if V8_MAJOR_VERSION >= 7
|
||||
v8::Local<v8::String> string = from->ToString(v8::Isolate::GetCurrent());
|
||||
#else
|
||||
v8::Local<v8::String> string = from->ToString();
|
||||
#endif
|
||||
if (!string.IsEmpty()) {
|
||||
size_t len = 3 * string->Length() + 1;
|
||||
assert(len <= INT_MAX);
|
||||
@@ -1041,7 +1074,11 @@ class Utf8String {
|
||||
}
|
||||
const int flags =
|
||||
v8::String::NO_NULL_TERMINATION | imp::kReplaceInvalidUtf8;
|
||||
#if V8_MAJOR_VERSION >= 7
|
||||
length_ = string->WriteUtf8(v8::Isolate::GetCurrent(), str_, static_cast<int>(len), 0, flags);
|
||||
#else
|
||||
length_ = string->WriteUtf8(str_, static_cast<int>(len), 0, flags);
|
||||
#endif
|
||||
str_[length_] = '\0';
|
||||
}
|
||||
}
|
||||
@@ -1899,7 +1936,7 @@ inline MaybeLocal<v8::Value> Call(
|
||||
const char* resource_name = "nan:AsyncBareProgressWorkerBase")
|
||||
: AsyncWorker(callback_, resource_name) {
|
||||
uv_async_init(
|
||||
uv_default_loop()
|
||||
GetCurrentEventLoop()
|
||||
, &async
|
||||
, AsyncProgress_
|
||||
);
|
||||
@@ -1940,16 +1977,20 @@ class AsyncBareProgressWorker : public AsyncBareProgressWorkerBase {
|
||||
Callback *callback_,
|
||||
const char* resource_name = "nan:AsyncBareProgressWorker")
|
||||
: AsyncBareProgressWorkerBase(callback_, resource_name) {
|
||||
uv_mutex_init(&async_lock);
|
||||
}
|
||||
|
||||
virtual ~AsyncBareProgressWorker() {
|
||||
uv_mutex_destroy(&async_lock);
|
||||
}
|
||||
|
||||
class ExecutionProgress {
|
||||
friend class AsyncBareProgressWorker;
|
||||
public:
|
||||
void Signal() const {
|
||||
uv_mutex_lock(&that_->async_lock);
|
||||
uv_async_send(&that_->async);
|
||||
uv_mutex_unlock(&that_->async_lock);
|
||||
}
|
||||
|
||||
void Send(const T* data, size_t count) const {
|
||||
@@ -1965,6 +2006,9 @@ class AsyncBareProgressWorker : public AsyncBareProgressWorkerBase {
|
||||
virtual void Execute(const ExecutionProgress& progress) = 0;
|
||||
virtual void HandleProgressCallback(const T *data, size_t size) = 0;
|
||||
|
||||
protected:
|
||||
uv_mutex_t async_lock;
|
||||
|
||||
private:
|
||||
void Execute() /*final override*/ {
|
||||
ExecutionProgress progress(this);
|
||||
@@ -1983,21 +2027,19 @@ class AsyncProgressWorkerBase : public AsyncBareProgressWorker<T> {
|
||||
const char* resource_name = "nan:AsyncProgressWorkerBase")
|
||||
: AsyncBareProgressWorker<T>(callback_, resource_name), asyncdata_(NULL),
|
||||
asyncsize_(0) {
|
||||
uv_mutex_init(&async_lock);
|
||||
}
|
||||
|
||||
virtual ~AsyncProgressWorkerBase() {
|
||||
uv_mutex_destroy(&async_lock);
|
||||
|
||||
delete[] asyncdata_;
|
||||
}
|
||||
|
||||
void WorkProgress() {
|
||||
uv_mutex_lock(&async_lock);
|
||||
uv_mutex_lock(&this->async_lock);
|
||||
T *data = asyncdata_;
|
||||
size_t size = asyncsize_;
|
||||
asyncdata_ = NULL;
|
||||
uv_mutex_unlock(&async_lock);
|
||||
asyncsize_ = 0;
|
||||
uv_mutex_unlock(&this->async_lock);
|
||||
|
||||
// Don't send progress events after we've already completed.
|
||||
if (this->callback) {
|
||||
@@ -2014,17 +2056,16 @@ class AsyncProgressWorkerBase : public AsyncBareProgressWorker<T> {
|
||||
std::copy(data, data + count, it);
|
||||
}
|
||||
|
||||
uv_mutex_lock(&async_lock);
|
||||
uv_mutex_lock(&this->async_lock);
|
||||
T *old_data = asyncdata_;
|
||||
asyncdata_ = new_data;
|
||||
asyncsize_ = count;
|
||||
uv_mutex_unlock(&async_lock);
|
||||
uv_async_send(&this->async);
|
||||
uv_mutex_unlock(&this->async_lock);
|
||||
|
||||
delete[] old_data;
|
||||
uv_async_send(&this->async);
|
||||
}
|
||||
|
||||
uv_mutex_t async_lock;
|
||||
T *asyncdata_;
|
||||
size_t asyncsize_;
|
||||
};
|
||||
@@ -2161,7 +2202,7 @@ inline void AsyncExecuteComplete (uv_work_t* req) {
|
||||
|
||||
inline void AsyncQueueWorker (AsyncWorker* worker) {
|
||||
uv_queue_work(
|
||||
uv_default_loop()
|
||||
GetCurrentEventLoop()
|
||||
, &worker->request
|
||||
, AsyncExecute
|
||||
, reinterpret_cast<uv_after_work_cb>(AsyncExecuteComplete)
|
||||
|
||||
Reference in New Issue
Block a user