Skip to content

Commit b40392f

Browse files
committed
move more resource deallocation to gc
1 parent 365d45f commit b40392f

File tree

11 files changed

+120
-168
lines changed

11 files changed

+120
-168
lines changed

R/aio.R

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ send_aio.nanoSocket <- function(con, data, mode = c("serial", "raw"), timeout) {
5757
logerror(aio)
5858
return(invisible(aio))
5959
}
60-
env <- `class<-`(new.env(), "sendAio")
60+
env <- `class<-`(new.env(hash = FALSE), "sendAio")
6161
result <- NULL
6262
unresolv <- TRUE
6363
makeActiveBinding(sym = "result", fun = function(x) {
@@ -66,6 +66,7 @@ send_aio.nanoSocket <- function(con, data, mode = c("serial", "raw"), timeout) {
6666
missing(res) && return(.Call(rnng_aio_unresolv))
6767
if (res) logerror(res)
6868
result <<- res
69+
rm("aio", envir = env)
6970
unresolv <<- FALSE
7071
}
7172
result
@@ -89,7 +90,7 @@ send_aio.nanoContext <- function(con, data, mode = c("serial", "raw"), timeout)
8990
logerror(aio)
9091
return(invisible(aio))
9192
}
92-
env <- `class<-`(new.env(), "sendAio")
93+
env <- `class<-`(new.env(hash = FALSE), "sendAio")
9394
result <- NULL
9495
unresolv <- TRUE
9596
makeActiveBinding(sym = "result", fun = function(x) {
@@ -98,6 +99,7 @@ send_aio.nanoContext <- function(con, data, mode = c("serial", "raw"), timeout)
9899
missing(res) && return(.Call(rnng_aio_unresolv))
99100
if (res) logerror(res)
100101
result <<- res
102+
rm("aio", envir = env)
101103
unresolv <<- FALSE
102104
}
103105
result
@@ -120,7 +122,7 @@ send_aio.nanoStream <- function(con, data, mode = "raw", timeout) {
120122
logerror(aio)
121123
return(invisible(aio))
122124
}
123-
env <- `class<-`(new.env(), "sendAio")
125+
env <- `class<-`(new.env(hash = FALSE), "sendAio")
124126
result <- NULL
125127
unresolv <- TRUE
126128
makeActiveBinding(sym = "result", fun = function(x) {
@@ -129,6 +131,7 @@ send_aio.nanoStream <- function(con, data, mode = "raw", timeout) {
129131
missing(res) && return(.Call(rnng_aio_unresolv))
130132
if (res) logerror(res)
131133
result <<- res
134+
rm("aio", envir = env)
132135
unresolv <<- FALSE
133136
}
134137
result
@@ -220,7 +223,7 @@ recv_aio.nanoSocket <- function(con,
220223
logerror(aio)
221224
return(invisible(aio))
222225
}
223-
env <- `class<-`(new.env(), "recvAio")
226+
env <- `class<-`(new.env(hash = FALSE), "recvAio")
224227
data <- raw <- NULL
225228
unresolv <- TRUE
226229
if (keep.raw) {
@@ -230,19 +233,22 @@ recv_aio.nanoSocket <- function(con,
230233
missing(res) && return(.Call(rnng_aio_unresolv))
231234
is.integer(res) && {
232235
data <<- raw <<- res
236+
rm("aio", envir = env)
233237
unresolv <<- FALSE
234238
logerror(res)
235239
return(invisible(data))
236240
}
237241
on.exit(expr = {
238242
raw <<- res
243+
rm("aio", envir = env)
239244
unresolv <<- FALSE
240245
return(res)
241246
})
242247
data <- decode(con = res, mode = mode)
243248
on.exit()
244249
raw <<- res
245250
data <<- data
251+
rm("aio", envir = env)
246252
unresolv <<- FALSE
247253
}
248254
raw
@@ -254,19 +260,22 @@ recv_aio.nanoSocket <- function(con,
254260
missing(res) && return(.Call(rnng_aio_unresolv))
255261
is.integer(res) && {
256262
data <<- raw <<- res
263+
rm("aio", envir = env)
257264
unresolv <<- FALSE
258265
logerror(res)
259266
return(invisible(data))
260267
}
261268
on.exit(expr = {
262269
data <<- res
270+
rm("aio", envir = env)
263271
unresolv <<- FALSE
264272
return(res)
265273
})
266274
data <- decode(con = res, mode = mode)
267275
on.exit()
268276
if (keep.raw) raw <<- res
269277
data <<- data
278+
rm("aio", envir = env)
270279
unresolv <<- FALSE
271280
}
272281
data
@@ -294,7 +303,7 @@ recv_aio.nanoContext <- function(con,
294303
logerror(aio)
295304
return(invisible(aio))
296305
}
297-
env <- `class<-`(new.env(), "recvAio")
306+
env <- `class<-`(new.env(hash = FALSE), "recvAio")
298307
data <- raw <- NULL
299308
unresolv <- TRUE
300309
if (keep.raw) {
@@ -304,19 +313,22 @@ recv_aio.nanoContext <- function(con,
304313
missing(res) && return(.Call(rnng_aio_unresolv))
305314
is.integer(res) && {
306315
data <<- raw <<- res
316+
rm("aio", envir = env)
307317
unresolv <<- FALSE
308318
logerror(res)
309319
return(invisible(data))
310320
}
311321
on.exit(expr = {
312322
raw <<- res
323+
rm("aio", envir = env)
313324
unresolv <<- FALSE
314325
return(res)
315326
})
316327
data <- decode(con = res, mode = mode)
317328
on.exit()
318329
raw <<- res
319330
data <<- data
331+
rm("aio", envir = env)
320332
unresolv <<- FALSE
321333
}
322334
raw
@@ -328,19 +340,22 @@ recv_aio.nanoContext <- function(con,
328340
missing(res) && return(.Call(rnng_aio_unresolv))
329341
is.integer(res) && {
330342
data <<- raw <<- res
343+
rm("aio", envir = env)
331344
unresolv <<- FALSE
332345
logerror(res)
333346
return(invisible(data))
334347
}
335348
on.exit(expr = {
336349
data <<- res
350+
rm("aio", envir = env)
337351
unresolv <<- FALSE
338352
return(res)
339353
})
340354
data <- decode(con = res, mode = mode)
341355
on.exit()
342356
if (keep.raw) raw <<- res
343357
data <<- data
358+
rm("aio", envir = env)
344359
unresolv <<- FALSE
345360
}
346361
data
@@ -369,7 +384,7 @@ recv_aio.nanoStream <- function(con,
369384
logerror(aio)
370385
return(invisible(aio))
371386
}
372-
env <- `class<-`(new.env(), "recvAio")
387+
env <- `class<-`(new.env(hash = FALSE), "recvAio")
373388
data <- raw <- NULL
374389
unresolv <- TRUE
375390
if (keep.raw) {
@@ -379,19 +394,22 @@ recv_aio.nanoStream <- function(con,
379394
missing(res) && return(.Call(rnng_aio_unresolv))
380395
is.integer(res) && {
381396
data <<- raw <<- res
397+
rm("aio", envir = env)
382398
unresolv <<- FALSE
383399
logerror(res)
384400
return(invisible(data))
385401
}
386402
on.exit(expr = {
387403
raw <<- res
404+
rm("aio", envir = env)
388405
unresolv <<- FALSE
389406
return(res)
390407
})
391408
data <- decode(con = res, mode = mode)
392409
on.exit()
393410
raw <<- res
394411
data <<- data
412+
rm("aio", envir = env)
395413
unresolv <<- FALSE
396414
}
397415
raw
@@ -403,19 +421,22 @@ recv_aio.nanoStream <- function(con,
403421
missing(res) && return(.Call(rnng_aio_unresolv))
404422
is.integer(res) && {
405423
data <<- raw <<- res
424+
rm("aio", envir = env)
406425
unresolv <<- FALSE
407426
logerror(res)
408427
return(invisible(data))
409428
}
410429
on.exit(expr = {
411430
data <<- res
412431
unresolv <<- FALSE
432+
rm("aio", envir = env)
413433
return(res)
414434
})
415435
data <- decode(con = res, mode = mode)
416436
on.exit()
417437
if (keep.raw) raw <<- res
418438
data <<- data
439+
rm("aio", envir = env)
419440
unresolv <<- FALSE
420441
}
421442
data
@@ -543,10 +564,7 @@ stop_aio <- function(aio) {
543564
#'
544565
unresolved <- function(aio) {
545566

546-
{inherits(aio, "unresolvedValue") ||
547-
inherits(aio, "recvAio") && inherits(.subset2(aio, "data"), "unresolvedValue") ||
548-
inherits(aio, "sendAio") && inherits(.subset2(aio, "result"), "unresolvedValue")} &&
549-
return(TRUE)
567+
.Call(rnng_unresolved, aio)
550568

551569
}
552570

R/context.R

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ reply <- function(context,
125125
res <- .Call(rnng_ctx_recv, context, timeout)
126126
is.integer(res) && {
127127
logerror(res)
128-
return(invisible(`class<-`(res, "errorValue")))
128+
return(invisible(res))
129129
}
130130
on.exit(expr = send_aio(context, as.raw(0L), mode = send_mode))
131131
data <- decode(con = res, mode = recv_mode)
@@ -210,9 +210,9 @@ request <- function(context,
210210
aio <- .Call(rnng_ctx_recv_aio, context, timeout)
211211
is.integer(aio) && {
212212
logerror(aio)
213-
return(invisible(`class<-`(aio, "errorValue")))
213+
return(invisible(aio))
214214
}
215-
env <- `class<-`(new.env(), "recvAio")
215+
env <- `class<-`(new.env(hash = FALSE), "recvAio")
216216
data <- raw <- NULL
217217
unresolv <- TRUE
218218
if (keep.raw) {
@@ -221,20 +221,23 @@ request <- function(context,
221221
res <- .Call(rnng_aio_get_msg, aio)
222222
missing(res) && return(.Call(rnng_aio_unresolv))
223223
is.integer(res) && {
224-
data <<- raw <<- `class<-`(res, "errorValue")
224+
data <<- raw <<- res
225+
rm("aio", envir = env)
225226
unresolv <<- FALSE
226227
logerror(res)
227228
return(invisible(data))
228229
}
229230
on.exit(expr = {
230231
raw <<- res
232+
rm("aio", envir = env)
231233
unresolv <<- FALSE
232234
return(res)
233235
})
234236
data <- decode(con = res, mode = recv_mode)
235237
on.exit()
236238
raw <<- res
237239
data <<- data
240+
rm("aio", envir = env)
238241
unresolv <<- FALSE
239242
}
240243
raw
@@ -245,20 +248,23 @@ request <- function(context,
245248
res <- .Call(rnng_aio_get_msg, aio)
246249
missing(res) && return(.Call(rnng_aio_unresolv))
247250
is.integer(res) && {
248-
data <<- raw <<- `class<-`(res, "errorValue")
251+
data <<- raw <<- res
252+
rm("aio", envir = env)
249253
unresolv <<- FALSE
250254
logerror(res)
251255
return(invisible(data))
252256
}
253257
on.exit(expr = {
254258
data <<- res
259+
rm("aio", envir = env)
255260
unresolv <<- FALSE
256261
return(res)
257262
})
258263
data <- decode(con = res, mode = recv_mode)
259264
on.exit()
260265
if (keep.raw) raw <<- res
261266
data <<- data
267+
rm("aio", envir = env)
262268
unresolv <<- FALSE
263269
}
264270
data

0 commit comments

Comments
 (0)