1
+ # truffleruby_primitives: true
2
+
1
3
# Copyright (c) 2013, Brian Shirai
2
4
# All rights reserved.
3
5
#
@@ -95,26 +97,25 @@ module Foreign
95
97
attach_function :freeifaddrs , [ :pointer ] , :void
96
98
97
99
def self . bind ( descriptor , sockaddr )
98
- sockaddr_p = Truffle :: FFI :: Pool . stack_alloc ( :char , sockaddr . bytesize )
100
+ sockaddr_p = Primitive . io_thread_buffer_allocate ( sockaddr . bytesize )
99
101
begin
100
102
sockaddr_p . write_bytes ( sockaddr )
101
103
_bind ( descriptor , sockaddr_p , sockaddr . bytesize )
102
104
ensure
103
- Truffle :: FFI :: Pool . stack_free ( sockaddr_p )
105
+ Primitive . io_thread_buffer_free ( sockaddr_p )
104
106
end
105
107
end
106
108
107
109
def self . connect ( descriptor , sockaddr )
108
110
sockaddr = Socket . coerce_to_string ( sockaddr )
109
111
110
- sockaddr_p = Truffle ::FFI ::Pool . stack_alloc ( :char , sockaddr . bytesize )
111
-
112
+ sockaddr_p = Primitive . io_thread_buffer_allocate ( sockaddr . bytesize )
112
113
begin
113
114
sockaddr_p . write_bytes ( sockaddr )
114
115
115
116
_connect ( descriptor , sockaddr_p , sockaddr . bytesize )
116
117
ensure
117
- Truffle :: FFI :: Pool . stack_free ( sockaddr_p )
118
+ Primitive . io_thread_buffer_free ( sockaddr_p )
118
119
end
119
120
end
120
121
@@ -143,10 +144,10 @@ def self.getaddrinfo(host, service = nil, family = nil, socktype = nil,
143
144
hints [ :ai_protocol ] = protocol || 0
144
145
hints [ :ai_flags ] = flags || 0
145
146
146
- res_p = Truffle :: FFI :: Pool . stack_alloc ( :pointer , 1 )
147
+ res_p = Primitive . io_thread_buffer_allocate ( Primitive . pointer_find_type_size ( :pointer ) )
147
148
148
149
res_p . clear
149
- err = _getaddrinfo ( host , service , hints . pointer , res_p )
150
+ err = _getaddrinfo ( host , service , hints . pointer , res_p )
150
151
151
152
raise SocketError , gai_strerror ( err ) unless err == 0
152
153
@@ -183,7 +184,7 @@ def self.getaddrinfo(host, service = nil, family = nil, socktype = nil,
183
184
184
185
# Be sure to feed a legit pointer to freeaddrinfo
185
186
freeaddrinfo ( ptr ) unless ptr . null?
186
- Truffle :: FFI :: Pool . stack_free ( res_p )
187
+ Primitive . io_thread_buffer_free ( res_p )
187
188
end
188
189
end
189
190
@@ -283,7 +284,7 @@ def self.pack_sockaddr_in(host, port, family = ::Socket::AF_UNSPEC,
283
284
host = '0.0.0.0'
284
285
end
285
286
286
- res_p = Truffle :: FFI :: Pool . stack_alloc ( :pointer , 1 )
287
+ res_p = Primitive . io_thread_buffer_allocate ( Primitive . pointer_find_type_size ( :pointer ) )
287
288
res_p . clear
288
289
289
290
err = _getaddrinfo ( host , port . to_s , hints . pointer , res_p )
@@ -302,7 +303,7 @@ def self.pack_sockaddr_in(host, port, family = ::Socket::AF_UNSPEC,
302
303
ptr = res_p . read_pointer
303
304
304
305
freeaddrinfo ( ptr ) unless ptr . null?
305
- Truffle :: FFI :: Pool . stack_free ( res_p )
306
+ Primitive . io_thread_buffer_free ( res_p )
306
307
end
307
308
end
308
309
@@ -328,7 +329,7 @@ def self.getpeereid(*)
328
329
end
329
330
330
331
def self . socketpair ( family , type , protocol )
331
- pointer = Truffle :: FFI :: Pool . stack_alloc ( :int , 2 )
332
+ pointer = Primitive . io_thread_buffer_allocate ( Primitive . pointer_find_type_size ( :int ) * 2 )
332
333
begin
333
334
pointer . clear
334
335
status = _socketpair ( family , type , protocol , pointer )
@@ -337,7 +338,7 @@ def self.socketpair(family, type, protocol)
337
338
338
339
pointer . read_array_of_int ( 2 )
339
340
ensure
340
- Truffle :: FFI :: Pool . stack_free ( pointer )
341
+ Primitive . io_thread_buffer_free ( pointer )
341
342
end
342
343
end
343
344
@@ -373,7 +374,7 @@ def self.ip_to_bytes(family, address)
373
374
address = address [ 0 ...i ]
374
375
end
375
376
376
- pointer = Truffle :: FFI :: Pool . stack_alloc ( :pointer , size )
377
+ pointer = Primitive . io_thread_buffer_allocate ( Primitive . pointer_find_type_size ( :pointer ) * size )
377
378
378
379
begin
379
380
status = inet_pton ( family , address , pointer )
@@ -382,7 +383,7 @@ def self.ip_to_bytes(family, address)
382
383
383
384
pointer . get_array_of_uchar ( 0 , size )
384
385
ensure
385
- Truffle :: FFI :: Pool . stack_free ( pointer )
386
+ Primitive . io_thread_buffer_free ( pointer )
386
387
end
387
388
end
388
389
end
0 commit comments