Linux unitednationsplay.com 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64
nginx/1.20.1
Server IP : 188.130.139.92 & Your IP : 3.147.67.34
Domains :
Cant Read [ /etc/named.conf ]
User : web
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
home /
www /
unp-musonza /
node_modules /
node-sass /
src /
Delete
Unzip
Name
Size
Permission
Date
Action
libsass
[ DIR ]
drwxr-xr-x
2021-02-04 21:24
sass_types
[ DIR ]
drwxr-xr-x
2021-02-04 21:24
.DS_Store
8
KB
-rw-r--r--
2018-04-24 15:53
binding.cpp
13.19
KB
-rw-r--r--
2018-08-09 12:53
callback_bridge.h
7
KB
-rw-r--r--
2018-08-09 12:53
create_string.cpp
446
B
-rw-r--r--
2018-08-09 12:53
create_string.h
124
B
-rw-r--r--
2018-08-09 12:53
custom_function_bridge.cpp
812
B
-rw-r--r--
2018-08-09 12:53
custom_function_bridge.h
532
B
-rw-r--r--
2018-08-09 12:53
custom_importer_bridge.cpp
3.37
KB
-rw-r--r--
2018-08-09 12:53
custom_importer_bridge.h
753
B
-rw-r--r--
2018-08-09 12:53
libsass.gyp
3.2
KB
-rw-r--r--
2018-07-08 11:24
sass_context_wrapper.cpp
1.72
KB
-rw-r--r--
2018-08-09 12:53
sass_context_wrapper.h
1.24
KB
-rw-r--r--
2018-08-09 12:53
Save
Rename
#ifndef CALLBACK_BRIDGE_H #define CALLBACK_BRIDGE_H #include <vector> #include <nan.h> #include <algorithm> #include <uv.h> #define COMMA , template <typename T, typename L = void*> class CallbackBridge { public: CallbackBridge(v8::Local<v8::Function>, bool); virtual ~CallbackBridge(); // Executes the callback T operator()(std::vector<void*>); protected: // We will expose a bridge object to the JS callback that wraps this instance so we don't loose context. // This is the V8 constructor for such objects. static Nan::MaybeLocal<v8::Function> get_wrapper_constructor(); static void async_gone(uv_handle_t *handle); static NAN_METHOD(New); static NAN_METHOD(ReturnCallback); static Nan::Persistent<v8::Function> wrapper_constructor; Nan::Persistent<v8::Object> wrapper; // The callback that will get called in the main thread after the worker thread used for the sass // compilation step makes a call to uv_async_send() static void dispatched_async_uv_callback(uv_async_t*); // The V8 values sent to our ReturnCallback must be read on the main thread not the sass worker thread. // This gives a chance to specialized subclasses to transform those values into whatever makes sense to // sass before we resume the worker thread. virtual T post_process_return_value(v8::Local<v8::Value>) const =0; virtual std::vector<v8::Local<v8::Value>> pre_process_args(std::vector<L>) const =0; Nan::Callback* callback; Nan::AsyncResource* async_resource; bool is_sync; uv_mutex_t cv_mutex; uv_cond_t condition_variable; uv_async_t *async; std::vector<L> argv; bool has_returned; T return_value; }; template <typename T, typename L> Nan::Persistent<v8::Function> CallbackBridge<T, L>::wrapper_constructor; template <typename T, typename L> CallbackBridge<T, L>::CallbackBridge(v8::Local<v8::Function> callback, bool is_sync) : callback(new Nan::Callback(callback)), is_sync(is_sync) { /* * This is invoked from the main JavaScript thread. * V8 context is available. */ Nan::HandleScope scope; uv_mutex_init(&this->cv_mutex); uv_cond_init(&this->condition_variable); if (!is_sync) { this->async = new uv_async_t; this->async->data = (void*) this; uv_async_init(uv_default_loop(), this->async, (uv_async_cb) dispatched_async_uv_callback); this->async_resource = new Nan::AsyncResource("node-sass:CallbackBridge"); } v8::Local<v8::Function> func = CallbackBridge<T, L>::get_wrapper_constructor().ToLocalChecked(); wrapper.Reset(Nan::NewInstance(func).ToLocalChecked()); Nan::SetInternalFieldPointer(Nan::New(wrapper), 0, this); } template <typename T, typename L> CallbackBridge<T, L>::~CallbackBridge() { delete this->callback; this->wrapper.Reset(); uv_cond_destroy(&this->condition_variable); uv_mutex_destroy(&this->cv_mutex); if (!is_sync) { uv_close((uv_handle_t*)this->async, &async_gone); delete this->async_resource; } } template <typename T, typename L> T CallbackBridge<T, L>::operator()(std::vector<void*> argv) { // argv.push_back(wrapper); if (this->is_sync) { /* * This is invoked from the main JavaScript thread. * V8 context is available. * * Establish Local<> scope for all functions * from types invoked by pre_process_args() and * post_process_args(). */ Nan::HandleScope scope; Nan::TryCatch try_catch; std::vector<v8::Local<v8::Value>> argv_v8 = pre_process_args(argv); if (try_catch.HasCaught()) { Nan::FatalException(try_catch); } argv_v8.push_back(Nan::New(wrapper)); return this->post_process_return_value( Nan::Call(*this->callback, argv_v8.size(), &argv_v8[0]).ToLocalChecked() ); } else { /* * This is invoked from the worker thread. * No V8 context and functions available. * Just wait for response from asynchronously * scheduled JavaScript code * * XXX Issue #1048: We block here even if the * event loop stops and the callback * would never be executed. * XXX Issue #857: By waiting here we occupy * one of the threads taken from the * uv threadpool. Might deadlock if * async I/O executed from JavaScript callbacks. */ this->argv = argv; uv_mutex_lock(&this->cv_mutex); this->has_returned = false; uv_async_send(this->async); while (!this->has_returned) { uv_cond_wait(&this->condition_variable, &this->cv_mutex); } uv_mutex_unlock(&this->cv_mutex); return this->return_value; } } template <typename T, typename L> void CallbackBridge<T, L>::dispatched_async_uv_callback(uv_async_t *req) { CallbackBridge* bridge = static_cast<CallbackBridge*>(req->data); /* * Function scheduled via uv_async mechanism, therefore * it is invoked from the main JavaScript thread. * V8 context is available. * * Establish Local<> scope for all functions * from types invoked by pre_process_args() and * post_process_args(). */ Nan::HandleScope scope; Nan::TryCatch try_catch; std::vector<v8::Local<v8::Value>> argv_v8 = bridge->pre_process_args(bridge->argv); if (try_catch.HasCaught()) { Nan::FatalException(try_catch); } argv_v8.push_back(Nan::New(bridge->wrapper)); bridge->callback->Call(argv_v8.size(), &argv_v8[0], bridge->async_resource); if (try_catch.HasCaught()) { Nan::FatalException(try_catch); } } template <typename T, typename L> NAN_METHOD(CallbackBridge<T COMMA L>::ReturnCallback) { /* * Callback function invoked by the user code. * It is invoked from the main JavaScript thread. * V8 context is available. * * Implicit Local<> handle scope created by NAN_METHOD(.) */ CallbackBridge<T, L>* bridge = static_cast<CallbackBridge<T, L>*>(Nan::GetInternalFieldPointer(info.This(), 0)); Nan::TryCatch try_catch; bridge->return_value = bridge->post_process_return_value(info[0]); { uv_mutex_lock(&bridge->cv_mutex); bridge->has_returned = true; uv_mutex_unlock(&bridge->cv_mutex); } uv_cond_broadcast(&bridge->condition_variable); if (try_catch.HasCaught()) { Nan::FatalException(try_catch); } } template <typename T, typename L> Nan::MaybeLocal<v8::Function> CallbackBridge<T, L>::get_wrapper_constructor() { /* Uses handle scope created in the CallbackBridge<T, L> constructor */ if (wrapper_constructor.IsEmpty()) { v8::Local<v8::FunctionTemplate> tpl = Nan::New<v8::FunctionTemplate>(New); tpl->SetClassName(Nan::New("CallbackBridge").ToLocalChecked()); tpl->InstanceTemplate()->SetInternalFieldCount(1); Nan::SetPrototypeTemplate(tpl, "success", Nan::New<v8::FunctionTemplate>(ReturnCallback) ); wrapper_constructor.Reset(Nan::GetFunction(tpl).ToLocalChecked()); } return Nan::New(wrapper_constructor); } template <typename T, typename L> NAN_METHOD(CallbackBridge<T COMMA L>::New) { info.GetReturnValue().Set(info.This()); } template <typename T, typename L> void CallbackBridge<T, L>::async_gone(uv_handle_t *handle) { delete (uv_async_t *)handle; } #endif