Skip to content
Permalink
Browse files

n-api: mark thread-safe function as stable

Fixes: #24249
PR-URL: #25556
Backport-PR-URL: #25648
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
  • Loading branch information...
gabrielschulhof authored and BethGriggs committed Jan 22, 2019
1 parent 44609d1 commit d6ffabc37f95aa4beda2f815e9fad6aed71e1802
@@ -171,15 +171,15 @@ This is an opaque pointer that is used to represent a JavaScript value.

### napi_threadsafe_function

> Stability: 1 - Experimental
> Stability: 2 - Stable
This is an opaque pointer that represents a JavaScript function which can be
called asynchronously from multiple threads via
`napi_call_threadsafe_function()`.

### napi_threadsafe_function_release_mode

> Stability: 1 - Experimental
> Stability: 2 - Stable
A value to be given to `napi_release_threadsafe_function()` to indicate whether
the thread-safe function is to be closed immediately (`napi_tsfn_abort`) or
@@ -194,7 +194,7 @@ typedef enum {

### napi_threadsafe_function_call_mode

> Stability: 1 - Experimental
> Stability: 2 - Stable
A value to be given to `napi_call_threadsafe_function()` to indicate whether
the call should block whenever the queue associated with the thread-safe
@@ -285,7 +285,7 @@ typedef void (*napi_async_complete_callback)(napi_env env,

#### napi_threadsafe_function_call_js

> Stability: 1 - Experimental
> Stability: 2 - Stable
Function pointer used with asynchronous thread-safe function calls. The callback
will be called on the main thread. Its purpose is to use a data item arriving
@@ -4184,7 +4184,7 @@ prevent the event loop from exiting. The APIs `napi_ref_threadsafe_function` and

### napi_create_threadsafe_function

> Stability: 1 - Experimental
> Stability: 2 - Stable
<!-- YAML
added: REPLACEME
@@ -4227,7 +4227,7 @@ parameters and with `undefined` as its `this` value.

### napi_get_threadsafe_function_context

> Stability: 1 - Experimental
> Stability: 2 - Stable
<!-- YAML
added: REPLACEME
@@ -4245,7 +4245,7 @@ This API may be called from any thread which makes use of `func`.

### napi_call_threadsafe_function

> Stability: 1 - Experimental
> Stability: 2 - Stable
<!-- YAML
added: REPLACEME
@@ -4273,7 +4273,7 @@ This API may be called from any thread which makes use of `func`.

### napi_acquire_threadsafe_function

> Stability: 1 - Experimental
> Stability: 2 - Stable
<!-- YAML
added: REPLACEME
@@ -4295,7 +4295,7 @@ This API may be called from any thread which will start making use of `func`.

### napi_release_threadsafe_function

> Stability: 1 - Experimental
> Stability: 2 - Stable
<!-- YAML
added: REPLACEME
@@ -4323,7 +4323,7 @@ This API may be called from any thread which will stop making use of `func`.

### napi_ref_threadsafe_function

> Stability: 1 - Experimental
> Stability: 2 - Stable
<!-- YAML
added: REPLACEME
@@ -4344,7 +4344,7 @@ This API may only be called from the main thread.

### napi_unref_threadsafe_function

> Stability: 1 - Experimental
> Stability: 2 - Stable
<!-- YAML
added: REPLACEME
@@ -3,20 +3,21 @@

#include <stddef.h>
#include <stdbool.h>
#include "node_api_types.h"

struct uv_loop_s; // Forward declaration.

#ifndef NAPI_VERSION
#ifdef NAPI_EXPERIMENTAL
// Use INT_MAX, this should only be consumed by the pre-processor anyway.
#define NAPI_VERSION 2147483647
#else
// The baseline version for N-API
#define NAPI_VERSION 3
#define NAPI_VERSION 4
#endif
#endif

#include "node_api_types.h"

struct uv_loop_s; // Forward declaration.

#ifdef _WIN32
#ifdef BUILDING_NODE_EXTENSION
#ifdef EXTERNAL_NAPI
@@ -614,7 +615,7 @@ NAPI_EXTERN napi_status napi_remove_env_cleanup_hook(napi_env env,

#endif // NAPI_VERSION >= 3

#ifdef NAPI_EXPERIMENTAL
#if NAPI_VERSION >= 4

// Calling into JS from other threads
NAPI_EXTERN napi_status
@@ -652,7 +653,7 @@ napi_unref_threadsafe_function(napi_env env, napi_threadsafe_function func);
NAPI_EXTERN napi_status
napi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func);

#endif // NAPI_EXPERIMENTAL
#endif // NAPI_VERSION >= 4

EXTERN_C_END

@@ -20,9 +20,9 @@ typedef struct napi_callback_info__ *napi_callback_info;
typedef struct napi_async_context__ *napi_async_context;
typedef struct napi_async_work__ *napi_async_work;
typedef struct napi_deferred__ *napi_deferred;
#ifdef NAPI_EXPERIMENTAL
#if NAPI_VERSION >= 4
typedef struct napi_threadsafe_function__* napi_threadsafe_function;
#endif // NAPI_EXPERIMENTAL
#endif // NAPI_VERSION >= 4

typedef enum {
napi_default = 0,
@@ -76,13 +76,13 @@ typedef enum {
napi_escape_called_twice,
napi_handle_scope_mismatch,
napi_callback_scope_mismatch,
#ifdef NAPI_EXPERIMENTAL
#if NAPI_VERSION >= 4
napi_queue_full,
napi_closing,
#endif // NAPI_EXPERIMENTAL
#endif // NAPI_VERSION >= 4
} napi_status;

#ifdef NAPI_EXPERIMENTAL
#if NAPI_VERSION >= 4
typedef enum {
napi_tsfn_release,
napi_tsfn_abort
@@ -92,7 +92,7 @@ typedef enum {
napi_tsfn_nonblocking,
napi_tsfn_blocking
} napi_threadsafe_function_call_mode;
#endif // NAPI_EXPERIMENTAL
#endif // NAPI_VERSION >= 4

typedef napi_value (*napi_callback)(napi_env env,
napi_callback_info info);
@@ -105,12 +105,12 @@ typedef void (*napi_async_complete_callback)(napi_env env,
napi_status status,
void* data);

#ifdef NAPI_EXPERIMENTAL
#if NAPI_VERSION >= 4
typedef void (*napi_threadsafe_function_call_js)(napi_env env,
napi_value js_callback,
void* context,
void* data);
#endif // NAPI_EXPERIMENTAL
#endif // NAPI_VERSION >= 4

typedef struct {
// One of utf8name or name should be NULL.
@@ -108,6 +108,6 @@
#define NODE_MODULE_VERSION 57

// the NAPI_VERSION provided by this version of the runtime
#define NAPI_VERSION 3
#define NAPI_VERSION 4

#endif // SRC_NODE_VERSION_H_
@@ -33,8 +33,8 @@ assert.notStrictEqual(test_general.testGetPrototype(baseObject),
test_general.testGetPrototype(extendedObject));

// test version management functions
// expected version is currently 3
assert.strictEqual(test_general.testGetVersion(), 3);
// expected version is currently 4
assert.strictEqual(test_general.testGetVersion(), 4);

const [ major, minor, patch, release ] = test_general.testGetNodeVersion();
assert.strictEqual(process.version.split('-')[0],
@@ -4,7 +4,6 @@
// which, in turn, may affect the ABI stability of the project despite its use
// of N-API.
#include <uv.h>
#define NAPI_EXPERIMENTAL
#include <node_api.h>
#include "../common.h"

0 comments on commit d6ffabc

Please sign in to comment.
You can’t perform that action at this time.