(U) de Ruby extensões: rb_gc_mark () e variáveis ??de instância
-
13-09-2019 - |
Pergunta
Eu estou escrevendo uma extensão ruby ??que define uma classe.
Se eu usar Data_Wrap_Struct()
para implementar o meu retorno para rb_define_alloc_func()
, eu preciso marca manualmente e liberar as variáveis ??de instância? Ou é que ainda manipulados para mim?
Solução
GC do Ruby irá recolher quaisquer objetos Ruby que são referenciados em variáveis ??de instância do seu objeto Ruby. Você não tem que, e não deve, livres de Ruby exemplo variáveis ??você mesmo (ou seja, quaisquer objetos acessados ??com rb_iv_set()
/ rb_iv_get()
em sua extensão).
No entanto, se o envolveu C struct referências objetos Ruby, então você vai ter que marcar aqueles no callback mark
você está passando para Data_Wrap_Struct()
.
(E você sempre terá de libertar a estrutura subjacente, e fazer qualquer outra clean-up que podem ser necessárias, tais como fechamento de arquivos, tomadas, etc. no seu retorno free
.)