@gjsify/sab-native 0.26.1 → 0.27.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +13 -8
- package/src/vala/sab-helpers.c +65 -2
- package/prebuilds/linux-arm64/GjsifySabNative-1.0.gir +0 -430
- package/prebuilds/linux-arm64/GjsifySabNative-1.0.typelib +0 -0
- package/prebuilds/linux-arm64/libgjsifysabnative.so +0 -0
- package/prebuilds/linux-ppc64/GjsifySabNative-1.0.gir +0 -430
- package/prebuilds/linux-ppc64/GjsifySabNative-1.0.typelib +0 -0
- package/prebuilds/linux-ppc64/libgjsifysabnative.so +0 -0
- package/prebuilds/linux-riscv64/GjsifySabNative-1.0.gir +0 -429
- package/prebuilds/linux-riscv64/GjsifySabNative-1.0.typelib +0 -0
- package/prebuilds/linux-riscv64/libgjsifysabnative.so +0 -0
- package/prebuilds/linux-s390x/GjsifySabNative-1.0.gir +0 -430
- package/prebuilds/linux-s390x/GjsifySabNative-1.0.typelib +0 -0
- package/prebuilds/linux-s390x/libgjsifysabnative.so +0 -0
- package/prebuilds/linux-x64/GjsifySabNative-1.0.gir +0 -430
- package/prebuilds/linux-x64/GjsifySabNative-1.0.typelib +0 -0
- package/prebuilds/linux-x64/libgjsifysabnative.so +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gjsify/sab-native",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.1",
|
|
4
4
|
"description": "Optional Vala/GObject bridge providing cross-process shared memory + atomics for @gjsify/worker_threads. Wraps Linux memfd_create(2) + mmap(MAP_SHARED) to back JS-visible SharedBuffer regions whose fds can be passed to child workers via SCM_RIGHTS over a Unix-domain socket; exposes typed accessors (getInt32LE / setUint8 / etc.) plus atomics built on __atomic_* GCC builtins and SYS_futex for wait/notify. Workaround for the stock-GJS gap where SharedArrayBuffer is unavailable (Mozilla disables the SAB constructor without COOP/COEP opts) and SAB cannot share backing stores across Gio.Subprocess workers anyway.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/esm/index.js",
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
},
|
|
15
15
|
"files": [
|
|
16
16
|
"lib",
|
|
17
|
-
"prebuilds",
|
|
18
17
|
"meson.build",
|
|
19
18
|
"src/vala"
|
|
20
19
|
],
|
|
@@ -26,7 +25,6 @@
|
|
|
26
25
|
"linux-s390x",
|
|
27
26
|
"linux-riscv64"
|
|
28
27
|
],
|
|
29
|
-
"prebuilds": "prebuilds",
|
|
30
28
|
"runtimes": {
|
|
31
29
|
"gjs": "polyfill",
|
|
32
30
|
"node": "none",
|
|
@@ -36,7 +34,7 @@
|
|
|
36
34
|
"tier": 1
|
|
37
35
|
},
|
|
38
36
|
"scripts": {
|
|
39
|
-
"clear": "
|
|
37
|
+
"clear": "gjsify clear lib build tsconfig.tsbuildinfo tsconfig.types.tsbuildinfo test.gjs.mjs",
|
|
40
38
|
"check": "gjsify tsc --noEmit",
|
|
41
39
|
"init:meson": "meson setup build .",
|
|
42
40
|
"init:meson:wipe": "gjsify run init:meson --wipe",
|
|
@@ -45,7 +43,7 @@
|
|
|
45
43
|
"build:meson": "gjsify run init:meson && meson compile -C build",
|
|
46
44
|
"build:types": "gjsify tsc",
|
|
47
45
|
"build:prebuilds": "gjsify run build:meson && node ../../../scripts/stage-prebuild.mjs .",
|
|
48
|
-
"build:gir-types": "ts-for-gir generate --externalDeps --allowMissingDeps --girDirectories
|
|
46
|
+
"build:gir-types": "ts-for-gir generate --externalDeps --allowMissingDeps --girDirectories=../sab-native-linux-x64/prebuilds/linux-x64 --girDirectories=/usr/share/gir-1.0 --modules=GjsifySabNative-1.0 --outdir=src/ts --npmScope=@girs --package=false --ignoreVersionConflicts=true",
|
|
49
47
|
"build:test": "gjsify run build:test:gjs",
|
|
50
48
|
"build:test:gjs": "gjsify build src/ts/test.mts --app gjs --outfile test.gjs.mjs",
|
|
51
49
|
"test": "gjsify run build:gjsify && gjsify run build:test && gjsify run test:gjs",
|
|
@@ -70,8 +68,8 @@
|
|
|
70
68
|
"@girs/gio-2.0": "^4.1.0"
|
|
71
69
|
},
|
|
72
70
|
"devDependencies": {
|
|
73
|
-
"@gjsify/cli": "^0.
|
|
74
|
-
"@gjsify/unit": "^0.
|
|
71
|
+
"@gjsify/cli": "^0.27.1",
|
|
72
|
+
"@gjsify/unit": "^0.27.1",
|
|
75
73
|
"@ts-for-gir/cli": "^4.1.0",
|
|
76
74
|
"@types/node": "^25.9.2",
|
|
77
75
|
"typescript": "^6.0.3"
|
|
@@ -85,5 +83,12 @@
|
|
|
85
83
|
"bugs": {
|
|
86
84
|
"url": "https://github.com/gjsify/gjsify/issues"
|
|
87
85
|
},
|
|
88
|
-
"homepage": "https://github.com/gjsify/gjsify/tree/main/packages/node/sab-native#readme"
|
|
86
|
+
"homepage": "https://github.com/gjsify/gjsify/tree/main/packages/node/sab-native#readme",
|
|
87
|
+
"optionalDependencies": {
|
|
88
|
+
"@gjsify/sab-native-linux-arm64": "0.27.1",
|
|
89
|
+
"@gjsify/sab-native-linux-ppc64": "0.27.1",
|
|
90
|
+
"@gjsify/sab-native-linux-riscv64": "0.27.1",
|
|
91
|
+
"@gjsify/sab-native-linux-s390x": "0.27.1",
|
|
92
|
+
"@gjsify/sab-native-linux-x64": "0.27.1"
|
|
93
|
+
}
|
|
89
94
|
}
|
package/src/vala/sab-helpers.c
CHANGED
|
@@ -3,6 +3,34 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Linux-only. Compile with -D_GNU_SOURCE so memfd_create, MFD_CLOEXEC,
|
|
5
5
|
* and the FUTEX_*_PRIVATE constants are visible.
|
|
6
|
+
*
|
|
7
|
+
* ONE ARTIFACT MUST SERVE BOTH LIBCS — no glibc-private symbols.
|
|
8
|
+
*
|
|
9
|
+
* This translation unit is compiled against glibc and the resulting
|
|
10
|
+
* `@gjsify/sab-native-linux-<arch>` declares no npm `libc` filter, so npm
|
|
11
|
+
* installs it on musl hosts too. That is deliberate (musl binds a `DT_NEEDED`
|
|
12
|
+
* of `libc.so.6` to itself), but it only holds while every symbol we reference
|
|
13
|
+
* exists in BOTH libcs — and two glibc conveniences quietly broke it:
|
|
14
|
+
*
|
|
15
|
+
* - `fcntl()` is redirected to `fcntl64()` by glibc >= 2.28 for large-file
|
|
16
|
+
* support. musl exports no `fcntl64`.
|
|
17
|
+
* - `CMSG_NXTHDR()` expands to a call to `__cmsg_nxthdr()`, a glibc-internal
|
|
18
|
+
* function musl does not have.
|
|
19
|
+
*
|
|
20
|
+
* GI opens the library with G_MODULE_BIND_LAZY, so neither is a load failure:
|
|
21
|
+
* the typelib resolved, `SharedBuffer.create()` worked, and the two unbound
|
|
22
|
+
* relocations surfaced only when their code path was first called. Measured on
|
|
23
|
+
* alpine:3.24 (x86-64) and on a OnePlus 6T under postmarketOS (aarch64): the
|
|
24
|
+
* package's own suite lost exactly its two fd-passing tests, and
|
|
25
|
+
* `@gjsify/worker_threads` lost all four SharedBuffer cross-process tests
|
|
26
|
+
* (timeout, not error) while both suites were fully green on glibc. So the
|
|
27
|
+
* `transferList` SharedBuffer path was broken on every musl host and no check
|
|
28
|
+
* could see it.
|
|
29
|
+
*
|
|
30
|
+
* Hence: reach the kernel directly (the same reason `memfd_create` below is a
|
|
31
|
+
* raw syscall) and do the cmsg arithmetic here, out of pure macros both libcs
|
|
32
|
+
* define identically. `ldd` under musl must report no unresolved symbol — that
|
|
33
|
+
* is what `.github/prebuild-toolchain/musl-build.sh` asserts with RTLD_NOW.
|
|
6
34
|
*/
|
|
7
35
|
|
|
8
36
|
#include "sab-helpers.h"
|
|
@@ -34,6 +62,41 @@ gjsify_memfd_create (const char *name, unsigned int flags)
|
|
|
34
62
|
return (int) syscall (SYS_memfd_create, name, flags);
|
|
35
63
|
}
|
|
36
64
|
|
|
65
|
+
/* `fcntl()` compiles to `fcntl64()` on glibc >= 2.28 (LFS redirect) and musl
|
|
66
|
+
* exports no such symbol — see the libc note in the file header. Every target
|
|
67
|
+
* in `gjsify.platforms` is LP64, where `SYS_fcntl` already takes 64-bit
|
|
68
|
+
* offsets, so there is no `SYS_fcntl64` case to pick between. */
|
|
69
|
+
static int
|
|
70
|
+
gjsify_dup_cloexec (int fd)
|
|
71
|
+
{
|
|
72
|
+
return (int) syscall (SYS_fcntl, fd, F_DUPFD_CLOEXEC, 0);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* musl defines CMSG_ALIGN under _GNU_SOURCE, as does glibc; the fallback is
|
|
76
|
+
* here so a libc that omits it cannot turn into a silent miscompile. */
|
|
77
|
+
#ifndef CMSG_ALIGN
|
|
78
|
+
# define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) & (size_t) ~(sizeof (size_t) - 1))
|
|
79
|
+
#endif
|
|
80
|
+
|
|
81
|
+
/* `CMSG_NXTHDR()` is a call to glibc-private `__cmsg_nxthdr()` — see the file
|
|
82
|
+
* header. This is that function's own logic, and BOTH of its bounds checks are
|
|
83
|
+
* kept: room for the next header, and room for that header's aligned payload.
|
|
84
|
+
* Dropping either would read past `msg_control` on a truncated control buffer,
|
|
85
|
+
* which is attacker-influenced data on a socket. */
|
|
86
|
+
static struct cmsghdr *
|
|
87
|
+
gjsify_cmsg_nxthdr (const struct msghdr *msg, struct cmsghdr *cmsg)
|
|
88
|
+
{
|
|
89
|
+
if (cmsg->cmsg_len < sizeof (struct cmsghdr)) return NULL;
|
|
90
|
+
|
|
91
|
+
unsigned char *end = (unsigned char *) msg->msg_control + msg->msg_controllen;
|
|
92
|
+
unsigned char *next = (unsigned char *) cmsg + CMSG_ALIGN (cmsg->cmsg_len);
|
|
93
|
+
|
|
94
|
+
if (next + sizeof (struct cmsghdr) > end) return NULL;
|
|
95
|
+
if (next + CMSG_ALIGN (((struct cmsghdr *) next)->cmsg_len) > end) return NULL;
|
|
96
|
+
|
|
97
|
+
return (struct cmsghdr *) next;
|
|
98
|
+
}
|
|
99
|
+
|
|
37
100
|
/* ────────────────────────────────────────────────────────────────────── *
|
|
38
101
|
* GjsifySabRegion: opaque shared-memory region
|
|
39
102
|
* ────────────────────────────────────────────────────────────────────── */
|
|
@@ -108,7 +171,7 @@ gjsify_sab_region_new_from_fd (gint fd, gsize size)
|
|
|
108
171
|
if (fd < 0 || size == 0) { errno = EINVAL; return NULL; }
|
|
109
172
|
|
|
110
173
|
/* dup so the caller can close their copy without unmapping ours. */
|
|
111
|
-
int dup_fd =
|
|
174
|
+
int dup_fd = gjsify_dup_cloexec (fd);
|
|
112
175
|
if (dup_fd < 0) return NULL;
|
|
113
176
|
|
|
114
177
|
void *ptr = mmap (NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, dup_fd, 0);
|
|
@@ -435,7 +498,7 @@ gjsify_sab_recv_fd (gint socket_fd, guint32 *tag)
|
|
|
435
498
|
*tag = GUINT32_FROM_BE (tag_be);
|
|
436
499
|
|
|
437
500
|
/* Extract the fd from the control message. */
|
|
438
|
-
for (struct cmsghdr *cm = CMSG_FIRSTHDR (&msg); cm != NULL; cm =
|
|
501
|
+
for (struct cmsghdr *cm = CMSG_FIRSTHDR (&msg); cm != NULL; cm = gjsify_cmsg_nxthdr (&msg, cm)) {
|
|
439
502
|
if (cm->cmsg_level == SOL_SOCKET && cm->cmsg_type == SCM_RIGHTS) {
|
|
440
503
|
int fd;
|
|
441
504
|
memcpy (&fd, CMSG_DATA (cm), sizeof (int));
|
|
@@ -1,430 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0"?>
|
|
2
|
-
<!-- GjsifySabNative-1.0.gir generated by valac 0.56.19, do not modify. -->
|
|
3
|
-
<repository version="1.2" xmlns="http://www.gtk.org/introspection/core/1.0" xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:doc="http://www.gtk.org/introspection/doc/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
|
|
4
|
-
<include name="GObject" version="2.0"/>
|
|
5
|
-
<include name="GLib" version="2.0"/>
|
|
6
|
-
<package name="gjsifysabnative"/>
|
|
7
|
-
<c:include name="gjsifysabnative.h"/>
|
|
8
|
-
<c:include name="sab-helpers.h"/>
|
|
9
|
-
<doc:format name="unknown"/>
|
|
10
|
-
<namespace name="GjsifySabNative" version="1.0" shared-library="libgjsifysabnative.so" c:prefix="GjsifySabNative" c:identifier-prefixes="GjsifySabNative" c:symbol-prefixes="gjsify_sab_native">
|
|
11
|
-
<class name="SharedBuffer" c:type="GjsifySabNativeSharedBuffer" c:symbol-prefix="shared_buffer" glib:type-name="GjsifySabNativeSharedBuffer" glib:get-type="gjsify_sab_native_shared_buffer_get_type" glib:type-struct="SharedBufferClass" parent="GObject.Object">
|
|
12
|
-
<field name="parent_instance" readable="0" private="1">
|
|
13
|
-
<type name="GObject.Object" c:type="GObject"/>
|
|
14
|
-
</field>
|
|
15
|
-
<field name="priv" readable="0" private="1">
|
|
16
|
-
<type name="SharedBufferPrivate" c:type="GjsifySabNativeSharedBufferPrivate*"/>
|
|
17
|
-
</field>
|
|
18
|
-
<function name="create" c:identifier="gjsify_sab_native_shared_buffer_create">
|
|
19
|
-
<return-value transfer-ownership="full" nullable="1">
|
|
20
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
21
|
-
</return-value>
|
|
22
|
-
<parameters>
|
|
23
|
-
<parameter name="size" transfer-ownership="none">
|
|
24
|
-
<type name="gulong" c:type="gsize"/>
|
|
25
|
-
</parameter>
|
|
26
|
-
</parameters>
|
|
27
|
-
</function>
|
|
28
|
-
<function name="from_fd" c:identifier="gjsify_sab_native_shared_buffer_from_fd">
|
|
29
|
-
<return-value transfer-ownership="full" nullable="1">
|
|
30
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
31
|
-
</return-value>
|
|
32
|
-
<parameters>
|
|
33
|
-
<parameter name="fd" transfer-ownership="none">
|
|
34
|
-
<type name="gint" c:type="gint"/>
|
|
35
|
-
</parameter>
|
|
36
|
-
<parameter name="size" transfer-ownership="none">
|
|
37
|
-
<type name="gulong" c:type="gsize"/>
|
|
38
|
-
</parameter>
|
|
39
|
-
</parameters>
|
|
40
|
-
</function>
|
|
41
|
-
<method name="get_u8" c:identifier="gjsify_sab_native_shared_buffer_get_u8">
|
|
42
|
-
<return-value transfer-ownership="full">
|
|
43
|
-
<type name="guint8" c:type="guint8"/>
|
|
44
|
-
</return-value>
|
|
45
|
-
<parameters>
|
|
46
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
47
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
48
|
-
</instance-parameter>
|
|
49
|
-
<parameter name="offset" transfer-ownership="none">
|
|
50
|
-
<type name="gulong" c:type="gsize"/>
|
|
51
|
-
</parameter>
|
|
52
|
-
</parameters>
|
|
53
|
-
</method>
|
|
54
|
-
<method name="set_u8" c:identifier="gjsify_sab_native_shared_buffer_set_u8">
|
|
55
|
-
<return-value transfer-ownership="full">
|
|
56
|
-
<type name="none" c:type="void"/>
|
|
57
|
-
</return-value>
|
|
58
|
-
<parameters>
|
|
59
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
60
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
61
|
-
</instance-parameter>
|
|
62
|
-
<parameter name="offset" transfer-ownership="none">
|
|
63
|
-
<type name="gulong" c:type="gsize"/>
|
|
64
|
-
</parameter>
|
|
65
|
-
<parameter name="v" transfer-ownership="none">
|
|
66
|
-
<type name="guint8" c:type="guint8"/>
|
|
67
|
-
</parameter>
|
|
68
|
-
</parameters>
|
|
69
|
-
</method>
|
|
70
|
-
<method name="get_u32_le" c:identifier="gjsify_sab_native_shared_buffer_get_u32_le">
|
|
71
|
-
<return-value transfer-ownership="full">
|
|
72
|
-
<type name="guint32" c:type="guint32"/>
|
|
73
|
-
</return-value>
|
|
74
|
-
<parameters>
|
|
75
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
76
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
77
|
-
</instance-parameter>
|
|
78
|
-
<parameter name="offset" transfer-ownership="none">
|
|
79
|
-
<type name="gulong" c:type="gsize"/>
|
|
80
|
-
</parameter>
|
|
81
|
-
</parameters>
|
|
82
|
-
</method>
|
|
83
|
-
<method name="set_u32_le" c:identifier="gjsify_sab_native_shared_buffer_set_u32_le">
|
|
84
|
-
<return-value transfer-ownership="full">
|
|
85
|
-
<type name="none" c:type="void"/>
|
|
86
|
-
</return-value>
|
|
87
|
-
<parameters>
|
|
88
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
89
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
90
|
-
</instance-parameter>
|
|
91
|
-
<parameter name="offset" transfer-ownership="none">
|
|
92
|
-
<type name="gulong" c:type="gsize"/>
|
|
93
|
-
</parameter>
|
|
94
|
-
<parameter name="v" transfer-ownership="none">
|
|
95
|
-
<type name="guint32" c:type="guint32"/>
|
|
96
|
-
</parameter>
|
|
97
|
-
</parameters>
|
|
98
|
-
</method>
|
|
99
|
-
<method name="get_i32_le" c:identifier="gjsify_sab_native_shared_buffer_get_i32_le">
|
|
100
|
-
<return-value transfer-ownership="full">
|
|
101
|
-
<type name="gint32" c:type="gint32"/>
|
|
102
|
-
</return-value>
|
|
103
|
-
<parameters>
|
|
104
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
105
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
106
|
-
</instance-parameter>
|
|
107
|
-
<parameter name="offset" transfer-ownership="none">
|
|
108
|
-
<type name="gulong" c:type="gsize"/>
|
|
109
|
-
</parameter>
|
|
110
|
-
</parameters>
|
|
111
|
-
</method>
|
|
112
|
-
<method name="set_i32_le" c:identifier="gjsify_sab_native_shared_buffer_set_i32_le">
|
|
113
|
-
<return-value transfer-ownership="full">
|
|
114
|
-
<type name="none" c:type="void"/>
|
|
115
|
-
</return-value>
|
|
116
|
-
<parameters>
|
|
117
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
118
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
119
|
-
</instance-parameter>
|
|
120
|
-
<parameter name="offset" transfer-ownership="none">
|
|
121
|
-
<type name="gulong" c:type="gsize"/>
|
|
122
|
-
</parameter>
|
|
123
|
-
<parameter name="v" transfer-ownership="none">
|
|
124
|
-
<type name="gint32" c:type="gint32"/>
|
|
125
|
-
</parameter>
|
|
126
|
-
</parameters>
|
|
127
|
-
</method>
|
|
128
|
-
<method name="get_u64_le" c:identifier="gjsify_sab_native_shared_buffer_get_u64_le">
|
|
129
|
-
<return-value transfer-ownership="full">
|
|
130
|
-
<type name="guint64" c:type="guint64"/>
|
|
131
|
-
</return-value>
|
|
132
|
-
<parameters>
|
|
133
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
134
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
135
|
-
</instance-parameter>
|
|
136
|
-
<parameter name="offset" transfer-ownership="none">
|
|
137
|
-
<type name="gulong" c:type="gsize"/>
|
|
138
|
-
</parameter>
|
|
139
|
-
</parameters>
|
|
140
|
-
</method>
|
|
141
|
-
<method name="set_u64_le" c:identifier="gjsify_sab_native_shared_buffer_set_u64_le">
|
|
142
|
-
<return-value transfer-ownership="full">
|
|
143
|
-
<type name="none" c:type="void"/>
|
|
144
|
-
</return-value>
|
|
145
|
-
<parameters>
|
|
146
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
147
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
148
|
-
</instance-parameter>
|
|
149
|
-
<parameter name="offset" transfer-ownership="none">
|
|
150
|
-
<type name="gulong" c:type="gsize"/>
|
|
151
|
-
</parameter>
|
|
152
|
-
<parameter name="v" transfer-ownership="none">
|
|
153
|
-
<type name="guint64" c:type="guint64"/>
|
|
154
|
-
</parameter>
|
|
155
|
-
</parameters>
|
|
156
|
-
</method>
|
|
157
|
-
<method name="read_bytes" c:identifier="gjsify_sab_native_shared_buffer_read_bytes">
|
|
158
|
-
<return-value transfer-ownership="full">
|
|
159
|
-
<type name="GLib.Bytes" c:type="GBytes*"/>
|
|
160
|
-
</return-value>
|
|
161
|
-
<parameters>
|
|
162
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
163
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
164
|
-
</instance-parameter>
|
|
165
|
-
<parameter name="offset" transfer-ownership="none">
|
|
166
|
-
<type name="gulong" c:type="gsize"/>
|
|
167
|
-
</parameter>
|
|
168
|
-
<parameter name="length" transfer-ownership="none">
|
|
169
|
-
<type name="gulong" c:type="gsize"/>
|
|
170
|
-
</parameter>
|
|
171
|
-
</parameters>
|
|
172
|
-
</method>
|
|
173
|
-
<method name="write_bytes" c:identifier="gjsify_sab_native_shared_buffer_write_bytes">
|
|
174
|
-
<return-value transfer-ownership="full">
|
|
175
|
-
<type name="none" c:type="void"/>
|
|
176
|
-
</return-value>
|
|
177
|
-
<parameters>
|
|
178
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
179
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
180
|
-
</instance-parameter>
|
|
181
|
-
<parameter name="offset" transfer-ownership="none">
|
|
182
|
-
<type name="gulong" c:type="gsize"/>
|
|
183
|
-
</parameter>
|
|
184
|
-
<parameter name="data" transfer-ownership="none">
|
|
185
|
-
<type name="GLib.Bytes" c:type="GBytes*"/>
|
|
186
|
-
</parameter>
|
|
187
|
-
</parameters>
|
|
188
|
-
</method>
|
|
189
|
-
<method name="atomic_add_i32" c:identifier="gjsify_sab_native_shared_buffer_atomic_add_i32">
|
|
190
|
-
<return-value transfer-ownership="full">
|
|
191
|
-
<type name="gint32" c:type="gint32"/>
|
|
192
|
-
</return-value>
|
|
193
|
-
<parameters>
|
|
194
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
195
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
196
|
-
</instance-parameter>
|
|
197
|
-
<parameter name="offset" transfer-ownership="none">
|
|
198
|
-
<type name="gulong" c:type="gsize"/>
|
|
199
|
-
</parameter>
|
|
200
|
-
<parameter name="v" transfer-ownership="none">
|
|
201
|
-
<type name="gint32" c:type="gint32"/>
|
|
202
|
-
</parameter>
|
|
203
|
-
</parameters>
|
|
204
|
-
</method>
|
|
205
|
-
<method name="atomic_sub_i32" c:identifier="gjsify_sab_native_shared_buffer_atomic_sub_i32">
|
|
206
|
-
<return-value transfer-ownership="full">
|
|
207
|
-
<type name="gint32" c:type="gint32"/>
|
|
208
|
-
</return-value>
|
|
209
|
-
<parameters>
|
|
210
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
211
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
212
|
-
</instance-parameter>
|
|
213
|
-
<parameter name="offset" transfer-ownership="none">
|
|
214
|
-
<type name="gulong" c:type="gsize"/>
|
|
215
|
-
</parameter>
|
|
216
|
-
<parameter name="v" transfer-ownership="none">
|
|
217
|
-
<type name="gint32" c:type="gint32"/>
|
|
218
|
-
</parameter>
|
|
219
|
-
</parameters>
|
|
220
|
-
</method>
|
|
221
|
-
<method name="atomic_load_i32" c:identifier="gjsify_sab_native_shared_buffer_atomic_load_i32">
|
|
222
|
-
<return-value transfer-ownership="full">
|
|
223
|
-
<type name="gint32" c:type="gint32"/>
|
|
224
|
-
</return-value>
|
|
225
|
-
<parameters>
|
|
226
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
227
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
228
|
-
</instance-parameter>
|
|
229
|
-
<parameter name="offset" transfer-ownership="none">
|
|
230
|
-
<type name="gulong" c:type="gsize"/>
|
|
231
|
-
</parameter>
|
|
232
|
-
</parameters>
|
|
233
|
-
</method>
|
|
234
|
-
<method name="atomic_store_i32" c:identifier="gjsify_sab_native_shared_buffer_atomic_store_i32">
|
|
235
|
-
<return-value transfer-ownership="full">
|
|
236
|
-
<type name="none" c:type="void"/>
|
|
237
|
-
</return-value>
|
|
238
|
-
<parameters>
|
|
239
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
240
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
241
|
-
</instance-parameter>
|
|
242
|
-
<parameter name="offset" transfer-ownership="none">
|
|
243
|
-
<type name="gulong" c:type="gsize"/>
|
|
244
|
-
</parameter>
|
|
245
|
-
<parameter name="v" transfer-ownership="none">
|
|
246
|
-
<type name="gint32" c:type="gint32"/>
|
|
247
|
-
</parameter>
|
|
248
|
-
</parameters>
|
|
249
|
-
</method>
|
|
250
|
-
<method name="atomic_xchg_i32" c:identifier="gjsify_sab_native_shared_buffer_atomic_xchg_i32">
|
|
251
|
-
<return-value transfer-ownership="full">
|
|
252
|
-
<type name="gint32" c:type="gint32"/>
|
|
253
|
-
</return-value>
|
|
254
|
-
<parameters>
|
|
255
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
256
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
257
|
-
</instance-parameter>
|
|
258
|
-
<parameter name="offset" transfer-ownership="none">
|
|
259
|
-
<type name="gulong" c:type="gsize"/>
|
|
260
|
-
</parameter>
|
|
261
|
-
<parameter name="v" transfer-ownership="none">
|
|
262
|
-
<type name="gint32" c:type="gint32"/>
|
|
263
|
-
</parameter>
|
|
264
|
-
</parameters>
|
|
265
|
-
</method>
|
|
266
|
-
<method name="atomic_cmpxchg_i32" c:identifier="gjsify_sab_native_shared_buffer_atomic_cmpxchg_i32">
|
|
267
|
-
<return-value transfer-ownership="full">
|
|
268
|
-
<type name="gint32" c:type="gint32"/>
|
|
269
|
-
</return-value>
|
|
270
|
-
<parameters>
|
|
271
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
272
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
273
|
-
</instance-parameter>
|
|
274
|
-
<parameter name="offset" transfer-ownership="none">
|
|
275
|
-
<type name="gulong" c:type="gsize"/>
|
|
276
|
-
</parameter>
|
|
277
|
-
<parameter name="expected" transfer-ownership="none">
|
|
278
|
-
<type name="gint32" c:type="gint32"/>
|
|
279
|
-
</parameter>
|
|
280
|
-
<parameter name="desired" transfer-ownership="none">
|
|
281
|
-
<type name="gint32" c:type="gint32"/>
|
|
282
|
-
</parameter>
|
|
283
|
-
</parameters>
|
|
284
|
-
</method>
|
|
285
|
-
<method name="futex_wait" c:identifier="gjsify_sab_native_shared_buffer_futex_wait">
|
|
286
|
-
<return-value transfer-ownership="full">
|
|
287
|
-
<type name="gint" c:type="gint"/>
|
|
288
|
-
</return-value>
|
|
289
|
-
<parameters>
|
|
290
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
291
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
292
|
-
</instance-parameter>
|
|
293
|
-
<parameter name="offset" transfer-ownership="none">
|
|
294
|
-
<type name="gulong" c:type="gsize"/>
|
|
295
|
-
</parameter>
|
|
296
|
-
<parameter name="expected" transfer-ownership="none">
|
|
297
|
-
<type name="gint32" c:type="gint32"/>
|
|
298
|
-
</parameter>
|
|
299
|
-
<parameter name="timeout_ms" transfer-ownership="none">
|
|
300
|
-
<type name="gint64" c:type="gint64"/>
|
|
301
|
-
</parameter>
|
|
302
|
-
</parameters>
|
|
303
|
-
</method>
|
|
304
|
-
<method name="futex_wake" c:identifier="gjsify_sab_native_shared_buffer_futex_wake">
|
|
305
|
-
<return-value transfer-ownership="full">
|
|
306
|
-
<type name="gint" c:type="gint"/>
|
|
307
|
-
</return-value>
|
|
308
|
-
<parameters>
|
|
309
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
310
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
311
|
-
</instance-parameter>
|
|
312
|
-
<parameter name="offset" transfer-ownership="none">
|
|
313
|
-
<type name="gulong" c:type="gsize"/>
|
|
314
|
-
</parameter>
|
|
315
|
-
<parameter name="count" transfer-ownership="none">
|
|
316
|
-
<type name="gint" c:type="gint"/>
|
|
317
|
-
</parameter>
|
|
318
|
-
</parameters>
|
|
319
|
-
</method>
|
|
320
|
-
<constructor name="new" c:identifier="gjsify_sab_native_shared_buffer_new">
|
|
321
|
-
<return-value transfer-ownership="full">
|
|
322
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
323
|
-
</return-value>
|
|
324
|
-
</constructor>
|
|
325
|
-
<property name="fd">
|
|
326
|
-
<type name="gint" c:type="gint"/>
|
|
327
|
-
</property>
|
|
328
|
-
<method name="get_fd" c:identifier="gjsify_sab_native_shared_buffer_get_fd">
|
|
329
|
-
<return-value transfer-ownership="none">
|
|
330
|
-
<type name="gint" c:type="gint"/>
|
|
331
|
-
</return-value>
|
|
332
|
-
<parameters>
|
|
333
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
334
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
335
|
-
</instance-parameter>
|
|
336
|
-
</parameters>
|
|
337
|
-
</method>
|
|
338
|
-
<property name="byte-length">
|
|
339
|
-
<type name="gulong" c:type="gsize"/>
|
|
340
|
-
</property>
|
|
341
|
-
<method name="get_byte_length" c:identifier="gjsify_sab_native_shared_buffer_get_byte_length">
|
|
342
|
-
<return-value transfer-ownership="none">
|
|
343
|
-
<type name="gulong" c:type="gsize"/>
|
|
344
|
-
</return-value>
|
|
345
|
-
<parameters>
|
|
346
|
-
<instance-parameter name="self" transfer-ownership="none">
|
|
347
|
-
<type name="GjsifySabNative.SharedBuffer" c:type="GjsifySabNativeSharedBuffer*"/>
|
|
348
|
-
</instance-parameter>
|
|
349
|
-
</parameters>
|
|
350
|
-
</method>
|
|
351
|
-
</class>
|
|
352
|
-
<record name="SharedBufferClass" c:type="GjsifySabNativeSharedBufferClass" glib:is-gtype-struct-for="SharedBuffer">
|
|
353
|
-
<field name="parent_class" readable="0" private="1">
|
|
354
|
-
<type name="GObject.ObjectClass" c:type="GObjectClass"/>
|
|
355
|
-
</field>
|
|
356
|
-
</record>
|
|
357
|
-
<record name="SharedBufferPrivate" c:type="GjsifySabNativeSharedBufferPrivate" disguised="1"/>
|
|
358
|
-
<class name="FdChannel" c:type="GjsifySabNativeFdChannel" c:symbol-prefix="fd_channel" glib:type-name="GjsifySabNativeFdChannel" glib:get-type="gjsify_sab_native_fd_channel_get_type" glib:type-struct="FdChannelClass" parent="GObject.Object">
|
|
359
|
-
<field name="parent_instance" readable="0" private="1">
|
|
360
|
-
<type name="GObject.Object" c:type="GObject"/>
|
|
361
|
-
</field>
|
|
362
|
-
<field name="priv" readable="0" private="1">
|
|
363
|
-
<type name="FdChannelPrivate" c:type="GjsifySabNativeFdChannelPrivate*"/>
|
|
364
|
-
</field>
|
|
365
|
-
<function name="make_pair" c:identifier="gjsify_sab_native_fd_channel_make_pair">
|
|
366
|
-
<return-value transfer-ownership="full">
|
|
367
|
-
<type name="gboolean" c:type="gboolean"/>
|
|
368
|
-
</return-value>
|
|
369
|
-
<parameters>
|
|
370
|
-
<parameter name="parent_fd" direction="out" transfer-ownership="full">
|
|
371
|
-
<type name="gint" c:type="gint*"/>
|
|
372
|
-
</parameter>
|
|
373
|
-
<parameter name="child_fd" direction="out" transfer-ownership="full">
|
|
374
|
-
<type name="gint" c:type="gint*"/>
|
|
375
|
-
</parameter>
|
|
376
|
-
</parameters>
|
|
377
|
-
</function>
|
|
378
|
-
<function name="send_fd" c:identifier="gjsify_sab_native_fd_channel_send_fd">
|
|
379
|
-
<return-value transfer-ownership="full">
|
|
380
|
-
<type name="gboolean" c:type="gboolean"/>
|
|
381
|
-
</return-value>
|
|
382
|
-
<parameters>
|
|
383
|
-
<parameter name="socket_fd" transfer-ownership="none">
|
|
384
|
-
<type name="gint" c:type="gint"/>
|
|
385
|
-
</parameter>
|
|
386
|
-
<parameter name="fd_to_send" transfer-ownership="none">
|
|
387
|
-
<type name="gint" c:type="gint"/>
|
|
388
|
-
</parameter>
|
|
389
|
-
<parameter name="tag" transfer-ownership="none">
|
|
390
|
-
<type name="guint32" c:type="guint32"/>
|
|
391
|
-
</parameter>
|
|
392
|
-
</parameters>
|
|
393
|
-
</function>
|
|
394
|
-
<function name="recv_fd" c:identifier="gjsify_sab_native_fd_channel_recv_fd">
|
|
395
|
-
<return-value transfer-ownership="full">
|
|
396
|
-
<type name="gint" c:type="gint"/>
|
|
397
|
-
</return-value>
|
|
398
|
-
<parameters>
|
|
399
|
-
<parameter name="socket_fd" transfer-ownership="none">
|
|
400
|
-
<type name="gint" c:type="gint"/>
|
|
401
|
-
</parameter>
|
|
402
|
-
<parameter name="tag" direction="out" transfer-ownership="full">
|
|
403
|
-
<type name="guint32" c:type="guint32*"/>
|
|
404
|
-
</parameter>
|
|
405
|
-
</parameters>
|
|
406
|
-
</function>
|
|
407
|
-
<function name="close_fd" c:identifier="gjsify_sab_native_fd_channel_close_fd">
|
|
408
|
-
<return-value transfer-ownership="full">
|
|
409
|
-
<type name="gboolean" c:type="gboolean"/>
|
|
410
|
-
</return-value>
|
|
411
|
-
<parameters>
|
|
412
|
-
<parameter name="fd" transfer-ownership="none">
|
|
413
|
-
<type name="gint" c:type="gint"/>
|
|
414
|
-
</parameter>
|
|
415
|
-
</parameters>
|
|
416
|
-
</function>
|
|
417
|
-
<constructor name="new" c:identifier="gjsify_sab_native_fd_channel_new">
|
|
418
|
-
<return-value transfer-ownership="full">
|
|
419
|
-
<type name="GjsifySabNative.FdChannel" c:type="GjsifySabNativeFdChannel*"/>
|
|
420
|
-
</return-value>
|
|
421
|
-
</constructor>
|
|
422
|
-
</class>
|
|
423
|
-
<record name="FdChannelClass" c:type="GjsifySabNativeFdChannelClass" glib:is-gtype-struct-for="FdChannel">
|
|
424
|
-
<field name="parent_class" readable="0" private="1">
|
|
425
|
-
<type name="GObject.ObjectClass" c:type="GObjectClass"/>
|
|
426
|
-
</field>
|
|
427
|
-
</record>
|
|
428
|
-
<record name="FdChannelPrivate" c:type="GjsifySabNativeFdChannelPrivate" disguised="1"/>
|
|
429
|
-
</namespace>
|
|
430
|
-
</repository>
|
|
Binary file
|
|
Binary file
|