forked from enlightenment/efl
fcf5f1d2e2
Summary: This commit makes use of the `ownership,shared` and `ownership,unique` events from Efl.Object in order to avoid the C# wrapper from being collected while C code holds a reference to the object. For example, creating a list of items in a for loop and attaching events to them would fails without this commit, as the C# GC may collect the wrapper. The basic idea is that we use a `WrapperSupervisor`, which is stored in the Eo data storage, with a GCHandle allocated for the lifetime of the underlying Eo object. This supervisor takes care of holding either a weak C# reference (when in unique mode, allowing the wrapper to be GC'd) or a hard C# reference (when in shared mode, making the wrapper non-collectable while the Eo has extra references). One limitation is that object graphs can leak if a shared object in the graph - an Eo child for example - stores a hard reference to another object in the graph as a C# field. In this example, this causes the parent to always have a hard C# reference (from the child) as the child is non-collectable due to the parent holding an Eo reference to it. Depends on D8678 Test Plan: `ninja test` and `make test` Reviewers: lauromoura, felipealmeida, woohyun, segfaultxavi Reviewed By: lauromoura Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D9014 |
||
---|---|---|
.. | ||
alias_definition.hh | ||
async_function_definition.hh | ||
blacklist.hh | ||
documentation.hh | ||
enum_definition.hh | ||
events.hh | ||
function_declaration.hh | ||
function_definition.hh | ||
function_helpers.hh | ||
function_pointer.hh | ||
function_registration.hh | ||
generation_contexts.hh | ||
helpers.hh | ||
klass.hh | ||
logging.hh | ||
marshall_annotation.hh | ||
marshall_type.hh | ||
marshall_type_impl.hh | ||
name_helpers.hh | ||
parameter.hh | ||
part_definition.hh | ||
struct_definition.hh | ||
struct_fields.hh | ||
type.hh | ||
type_impl.hh | ||
using_decl.hh | ||
utils.hh | ||
variable_definition.hh |