@@ -45,92 +45,166 @@ for name in names(@__MODULE__; all=true)
45
45
@eval export $ name
46
46
end
47
47
48
- const DEFAULT_AWS_EVENT_LOOP_GROUP = Ref {Ptr{aws_event_loop_group}} (C_NULL )
48
+ mutable struct EventLoopGroup
49
+ ptr:: Ptr{aws_event_loop_group}
50
+ EventLoopGroup (ptr:: Ptr ) =
51
+ finalizer (new (Ptr {aws_event_loop_group} (ptr))) do x
52
+ if ptr != C_NULL
53
+ aws_event_loop_group_release (ptr)
54
+ # for i = 1:aws_event_loop_group_get_loop_count(ptr)
55
+ # Core.println("stopping event loop $i")
56
+ # el = aws_event_loop_group_get_loop_at(ptr, i - 1)
57
+ # aws_event_loop_stop(el)
58
+ # aws_event_loop_destroy(el)
59
+ # end
60
+ end
61
+ end
62
+ end
63
+
64
+ const DEFAULT_AWS_EVENT_LOOP_GROUP = Ref {EventLoopGroup} (EventLoopGroup (C_NULL ))
49
65
const DEFAULT_AWS_EVENT_LOOP_GROUP_LOCK = ReentrantLock ()
50
66
51
- function set_default_aws_event_loop_group! (group)
67
+ function set_default_aws_event_loop_group! (group:: Ptr{aws_event_loop_group} )
52
68
@lock DEFAULT_AWS_EVENT_LOOP_GROUP_LOCK begin
53
- DEFAULT_AWS_EVENT_LOOP_GROUP[] = group
69
+ DEFAULT_AWS_EVENT_LOOP_GROUP[] = EventLoopGroup ( group)
54
70
return
55
71
end
56
72
end
57
73
58
74
function default_aws_event_loop_group ()
59
75
@lock DEFAULT_AWS_EVENT_LOOP_GROUP_LOCK begin
60
- if DEFAULT_AWS_EVENT_LOOP_GROUP[] == C_NULL
76
+ if DEFAULT_AWS_EVENT_LOOP_GROUP[]. ptr == C_NULL
61
77
init ()
62
78
maxthreads = LIB_AWS_IO_MAX_THREADS[]
63
79
# populate default event loop group; 0 means one event loop per non-hyperthread core
64
80
set_default_aws_event_loop_group! (aws_event_loop_group_new_default (default_aws_allocator (), maxthreads, C_NULL ))
65
81
end
66
- return DEFAULT_AWS_EVENT_LOOP_GROUP[]
82
+ return DEFAULT_AWS_EVENT_LOOP_GROUP[]. ptr
83
+ end
84
+ end
85
+
86
+ function close_default_aws_event_loop_group! ()
87
+ @lock DEFAULT_AWS_EVENT_LOOP_GROUP_LOCK begin
88
+ if DEFAULT_AWS_EVENT_LOOP_GROUP[]. ptr != C_NULL
89
+ finalize (DEFAULT_AWS_EVENT_LOOP_GROUP[])
90
+ set_default_aws_event_loop_group! (Ptr {aws_event_loop_group} (C_NULL ))
91
+ end
92
+ return
67
93
end
68
94
end
69
95
70
- const DEFAULT_AWS_HOST_RESOLVER = Ref {Ptr{aws_host_resolver}} (C_NULL )
96
+ mutable struct HostResolver
97
+ ptr:: Ptr{aws_host_resolver}
98
+ HostResolver (ptr:: Ptr ) =
99
+ finalizer (_ -> aws_host_resolver_release (ptr), new (Ptr {aws_host_resolver} (ptr)))
100
+ end
101
+
102
+ const DEFAULT_AWS_HOST_RESOLVER = Ref {HostResolver} (HostResolver (C_NULL ))
71
103
const DEFAULT_AWS_HOST_RESOLVER_LOCK = ReentrantLock ()
72
104
73
- function set_default_aws_host_resolver! (resolver)
105
+ function set_default_aws_host_resolver! (resolver:: Ptr{aws_host_resolver} )
74
106
@lock DEFAULT_AWS_HOST_RESOLVER_LOCK begin
75
- DEFAULT_AWS_HOST_RESOLVER[] = resolver
107
+ DEFAULT_AWS_HOST_RESOLVER[] = HostResolver ( resolver)
76
108
return
77
109
end
78
110
end
79
111
80
112
function default_aws_host_resolver ()
81
113
@lock DEFAULT_AWS_HOST_RESOLVER_LOCK begin
82
- if DEFAULT_AWS_HOST_RESOLVER[] == C_NULL
114
+ if DEFAULT_AWS_HOST_RESOLVER[]. ptr == C_NULL
83
115
init ()
84
116
resolver_options = aws_host_resolver_default_options (8 , default_aws_event_loop_group (), C_NULL , C_NULL )
85
117
set_default_aws_host_resolver! (aws_host_resolver_new_default (default_aws_allocator (), Ref (resolver_options)))
86
118
end
87
- return DEFAULT_AWS_HOST_RESOLVER[]
119
+ return DEFAULT_AWS_HOST_RESOLVER[]. ptr
120
+ end
121
+ end
122
+
123
+ function close_default_aws_host_resolver! ()
124
+ @lock DEFAULT_AWS_HOST_RESOLVER_LOCK begin
125
+ if DEFAULT_AWS_HOST_RESOLVER[]. ptr != C_NULL
126
+ finalize (DEFAULT_AWS_HOST_RESOLVER[])
127
+ set_default_aws_host_resolver! (Ptr {aws_host_resolver} (C_NULL ))
128
+ end
129
+ return
88
130
end
89
131
end
90
132
91
133
# aws_client_bootstrap
92
- const DEFAULT_AWS_CLIENT_BOOTSTRAP = Ref {Ptr{aws_client_bootstrap}} (C_NULL )
134
+ mutable struct ClientBootstrap
135
+ ptr:: Ptr{aws_client_bootstrap}
136
+ ClientBootstrap (ptr:: Ptr ) =
137
+ finalizer (_ -> aws_client_bootstrap_release (ptr), new (Ptr {aws_client_bootstrap} (ptr)))
138
+ end
139
+
140
+ const DEFAULT_AWS_CLIENT_BOOTSTRAP = Ref {ClientBootstrap} (ClientBootstrap (C_NULL ))
93
141
const DEFAULT_AWS_CLIENT_BOOTSTRAP_LOCK = ReentrantLock ()
94
142
95
- function set_default_aws_client_bootstrap! (bootstrap)
143
+ function set_default_aws_client_bootstrap! (bootstrap:: Ptr{aws_client_bootstrap} )
96
144
@lock DEFAULT_AWS_CLIENT_BOOTSTRAP_LOCK begin
97
- DEFAULT_AWS_CLIENT_BOOTSTRAP[] = bootstrap
145
+ DEFAULT_AWS_CLIENT_BOOTSTRAP[] = ClientBootstrap ( bootstrap)
98
146
return
99
147
end
100
148
end
101
149
102
150
function default_aws_client_bootstrap ()
103
151
@lock DEFAULT_AWS_CLIENT_BOOTSTRAP_LOCK begin
104
- if DEFAULT_AWS_CLIENT_BOOTSTRAP[] == C_NULL
152
+ if DEFAULT_AWS_CLIENT_BOOTSTRAP[]. ptr == C_NULL
105
153
init ()
106
154
el_group = default_aws_event_loop_group ()
107
155
host_resolver = default_aws_host_resolver ()
108
156
bootstrap_options = aws_client_bootstrap_options (el_group, host_resolver, C_NULL , C_NULL , C_NULL )
109
157
set_default_aws_client_bootstrap! (aws_client_bootstrap_new (default_aws_allocator (), Ref (bootstrap_options)))
110
158
end
111
- return DEFAULT_AWS_CLIENT_BOOTSTRAP[]
159
+ return DEFAULT_AWS_CLIENT_BOOTSTRAP[]. ptr
160
+ end
161
+ end
162
+
163
+ function close_default_aws_client_bootstrap! ()
164
+ @lock DEFAULT_AWS_CLIENT_BOOTSTRAP_LOCK begin
165
+ if DEFAULT_AWS_CLIENT_BOOTSTRAP[]. ptr != C_NULL
166
+ finalize (DEFAULT_AWS_CLIENT_BOOTSTRAP[])
167
+ set_default_aws_client_bootstrap! (Ptr {aws_client_bootstrap} (C_NULL ))
168
+ end
169
+ return
112
170
end
113
171
end
114
172
115
173
# aws_server_bootstrap
116
- const DEFAULT_AWS_SERVER_BOOTSTRAP = Ref {Ptr{aws_server_bootstrap}} (C_NULL )
174
+ mutable struct ServerBootstrap
175
+ ptr:: Ptr{aws_server_bootstrap}
176
+ ServerBootstrap (ptr:: Ptr ) =
177
+ finalizer (_ -> aws_server_bootstrap_release (ptr), new (Ptr {aws_server_bootstrap} (ptr)))
178
+ end
179
+
180
+ const DEFAULT_AWS_SERVER_BOOTSTRAP = Ref {ServerBootstrap} (ServerBootstrap (C_NULL ))
117
181
const DEFAULT_AWS_SERVER_BOOTSTRAP_LOCK = ReentrantLock ()
118
182
119
- function set_default_aws_server_bootstrap! (bootstrap)
183
+ function set_default_aws_server_bootstrap! (bootstrap:: Ptr{aws_server_bootstrap} )
120
184
@lock DEFAULT_AWS_SERVER_BOOTSTRAP_LOCK begin
121
- DEFAULT_AWS_SERVER_BOOTSTRAP[] = bootstrap
185
+ DEFAULT_AWS_SERVER_BOOTSTRAP[] = ServerBootstrap ( bootstrap)
122
186
return
123
187
end
124
188
end
125
189
126
190
function default_aws_server_bootstrap ()
127
191
@lock DEFAULT_AWS_SERVER_BOOTSTRAP_LOCK begin
128
- if DEFAULT_AWS_SERVER_BOOTSTRAP[] == C_NULL
192
+ if DEFAULT_AWS_SERVER_BOOTSTRAP[]. ptr == C_NULL
129
193
init ()
130
194
el_group = default_aws_event_loop_group ()
131
195
set_default_aws_server_bootstrap! (aws_server_bootstrap_new (default_aws_allocator (), el_group))
132
196
end
133
- return DEFAULT_AWS_SERVER_BOOTSTRAP[]
197
+ return DEFAULT_AWS_SERVER_BOOTSTRAP[]. ptr
198
+ end
199
+ end
200
+
201
+ function close_default_aws_server_bootstrap! ()
202
+ @lock DEFAULT_AWS_SERVER_BOOTSTRAP_LOCK begin
203
+ if DEFAULT_AWS_SERVER_BOOTSTRAP[]. ptr != C_NULL
204
+ finalize (DEFAULT_AWS_SERVER_BOOTSTRAP[])
205
+ set_default_aws_server_bootstrap! (Ptr {aws_server_bootstrap} (C_NULL ))
206
+ end
207
+ return
134
208
end
135
209
end
136
210
@@ -184,7 +258,10 @@ function tlsoptions(host::String;
184
258
return tls_options
185
259
end
186
260
187
- export default_aws_event_loop_group, set_default_aws_event_loop_group!, default_aws_host_resolver, default_aws_client_bootstrap, set_default_aws_client_bootstrap!, default_aws_server_bootstrap, set_default_aws_server_bootstrap!, tlsoptions
261
+ export default_aws_event_loop_group, set_default_aws_event_loop_group!, default_aws_host_resolver,
262
+ default_aws_client_bootstrap, set_default_aws_client_bootstrap!, default_aws_server_bootstrap,
263
+ set_default_aws_server_bootstrap!, tlsoptions, close_default_aws_event_loop_group!,
264
+ close_default_aws_host_resolver!, close_default_aws_client_bootstrap!, close_default_aws_server_bootstrap!
188
265
189
266
const LIB_AWS_IO_MAX_THREADS = Ref {Int} (0 )
190
267
0 commit comments