@gjsify/sab-native 0.4.12
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/lib/esm/_virtual/_rolldown/runtime.js +1 -0
- package/lib/esm/index.js +1 -0
- package/lib/types/index.d.ts +186 -0
- package/lib/types/shared-buffer.gjs.spec.d.ts +2 -0
- package/meson.build +57 -0
- package/package.json +65 -0
- package/prebuilds/linux-aarch64/GjsifySabNative-1.0.gir +430 -0
- package/prebuilds/linux-aarch64/GjsifySabNative-1.0.typelib +0 -0
- package/prebuilds/linux-aarch64/libgjsifysabnative.so +0 -0
- package/prebuilds/linux-ppc64/GjsifySabNative-1.0.gir +430 -0
- 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 +429 -0
- 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 +430 -0
- package/prebuilds/linux-s390x/GjsifySabNative-1.0.typelib +0 -0
- package/prebuilds/linux-s390x/libgjsifysabnative.so +0 -0
- package/prebuilds/linux-x86_64/GjsifySabNative-1.0.gir +430 -0
- package/prebuilds/linux-x86_64/GjsifySabNative-1.0.typelib +0 -0
- package/prebuilds/linux-x86_64/libgjsifysabnative.so +0 -0
- package/src/vala/fd-passing.vala +101 -0
- package/src/vala/sab-helpers.c +461 -0
- package/src/vala/sab-helpers.h +150 -0
- package/src/vala/shared-buffer.vala +201 -0
|
@@ -0,0 +1,430 @@
|
|
|
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
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* FdChannel — Unix-domain socketpair + SCM_RIGHTS fd-transfer helper.
|
|
3
|
+
*
|
|
4
|
+
* Used by @gjsify/worker_threads to attach the fd of a SharedBuffer to a
|
|
5
|
+
* postMessage() call. Workflow:
|
|
6
|
+
*
|
|
7
|
+
* 1. Before spawning the child Worker, the parent calls
|
|
8
|
+
* `FdChannel.make_pair()` — returns (parent_fd, child_fd).
|
|
9
|
+
* 2. `Gio.SubprocessLauncher.take_fd(child_fd, 3)` makes the child end
|
|
10
|
+
* inherit at fd 3 in the worker process. Parent retains parent_fd.
|
|
11
|
+
* 3. For each postMessage() that contains SharedBuffer instances, the
|
|
12
|
+
* parent calls `FdChannel.send_fd(parent_fd, sb.fd, tag)` for each
|
|
13
|
+
* buffer, then writes a JSON message with placeholders
|
|
14
|
+
* `{__sab: <tag>, size: N}` over stdin.
|
|
15
|
+
* 4. The child runs `FdChannel.recv_fd(socket_fd=3, out tag)` in a loop
|
|
16
|
+
* and maintains a Map<tag, fd> that the bootstrap consults when it
|
|
17
|
+
* sees placeholders in incoming JSON messages.
|
|
18
|
+
*
|
|
19
|
+
* Socket type: SOCK_SEQPACKET so each fd-transfer is one atomic message,
|
|
20
|
+
* never split across recvmsg calls. SOCK_CLOEXEC on both ends so the
|
|
21
|
+
* child's `gjs` inherits the fd but the grand-child of any nested
|
|
22
|
+
* subprocess doesn't.
|
|
23
|
+
*
|
|
24
|
+
* The tag is a 4-byte big-endian integer (caller-allocated sequence
|
|
25
|
+
* number). 4 G fd-transfers per worker lifetime — plenty.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
namespace GjsifySabNative {
|
|
29
|
+
|
|
30
|
+
/* C externs — defined in sab-helpers.c. */
|
|
31
|
+
|
|
32
|
+
[CCode (cname = "gjsify_sab_socketpair",
|
|
33
|
+
cheader_filename = "sab-helpers.h")]
|
|
34
|
+
private extern bool _socketpair (out int parent_fd, out int child_fd);
|
|
35
|
+
|
|
36
|
+
[CCode (cname = "gjsify_sab_send_fd",
|
|
37
|
+
cheader_filename = "sab-helpers.h")]
|
|
38
|
+
private extern bool _send_fd (int socket_fd, int fd_to_send, uint32 tag);
|
|
39
|
+
|
|
40
|
+
[CCode (cname = "gjsify_sab_recv_fd",
|
|
41
|
+
cheader_filename = "sab-helpers.h")]
|
|
42
|
+
private extern int _recv_fd (int socket_fd, out uint32 tag);
|
|
43
|
+
|
|
44
|
+
[CCode (cname = "gjsify_sab_close_fd",
|
|
45
|
+
cheader_filename = "sab-helpers.h")]
|
|
46
|
+
private extern bool _close_fd (int fd);
|
|
47
|
+
|
|
48
|
+
/* ── Public static API ──────────────────────────────────────────────── */
|
|
49
|
+
|
|
50
|
+
public class FdChannel : GLib.Object {
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Create an AF_UNIX/SOCK_SEQPACKET socketpair. Both fds have
|
|
54
|
+
* SOCK_CLOEXEC set.
|
|
55
|
+
*
|
|
56
|
+
* Caller MUST close both fds eventually:
|
|
57
|
+
* - parent_fd: typically closed in `Worker.terminate()` / dispose.
|
|
58
|
+
* - child_fd: closed by `Gio.SubprocessLauncher.take_fd()` when
|
|
59
|
+
* ownership transfers to the spawned child.
|
|
60
|
+
*
|
|
61
|
+
* Returns false on socketpair() failure (errno preserved).
|
|
62
|
+
*/
|
|
63
|
+
public static bool make_pair (out int parent_fd, out int child_fd) {
|
|
64
|
+
return _socketpair (out parent_fd, out child_fd);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Send a single fd over a previously-paired SOCK_SEQPACKET socket
|
|
69
|
+
* via SCM_RIGHTS. The payload is a 4-byte big-endian tag so the
|
|
70
|
+
* receiver can map back to the JSON-side placeholder.
|
|
71
|
+
*
|
|
72
|
+
* Returns false on sendmsg() failure (errno preserved).
|
|
73
|
+
*/
|
|
74
|
+
public static bool send_fd (int socket_fd, int fd_to_send, uint32 tag) {
|
|
75
|
+
return _send_fd (socket_fd, fd_to_send, tag);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Receive one fd from the paired socket. Blocks until a message
|
|
80
|
+
* arrives, the peer closes (orderly EOF, returns 0), or an error
|
|
81
|
+
* occurs.
|
|
82
|
+
*
|
|
83
|
+
* Returns:
|
|
84
|
+
* > 0 received fd; @tag is set to the sender's tag value
|
|
85
|
+
* = 0 orderly EOF (peer closed the socket); @tag undefined
|
|
86
|
+
* < 0 error; errno preserved; @tag undefined
|
|
87
|
+
*/
|
|
88
|
+
public static int recv_fd (int socket_fd, out uint32 tag) {
|
|
89
|
+
return _recv_fd (socket_fd, out tag);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Wrap close(2) so JS callers don't have to pull in GioUnix just for
|
|
94
|
+
* a one-shot fd close on cleanup. Returns true on success or if the
|
|
95
|
+
* fd was already closed (EBADF — caller's intent satisfied either way).
|
|
96
|
+
*/
|
|
97
|
+
public static bool close_fd (int fd) {
|
|
98
|
+
return _close_fd (fd);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|