@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gjsify/sab-native",
3
- "version": "0.26.1",
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": "rm -rf lib build tsconfig.tsbuildinfo tsconfig.types.tsbuildinfo test.gjs.mjs || exit 0",
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=./prebuilds/linux-x64 --girDirectories=/usr/share/gir-1.0 --modules=GjsifySabNative-1.0 --outdir=src/ts --npmScope=@girs --package=false --ignoreVersionConflicts=true",
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.26.1",
74
- "@gjsify/unit": "^0.26.1",
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
  }
@@ -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 = fcntl (fd, F_DUPFD_CLOEXEC, 0);
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 = CMSG_NXTHDR (&msg, 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>