mer-hybris / libgbinder

GLib-style interface to binder
BSD 3-Clause "New" or "Revised" License
51 stars 40 forks source link

Make sure stale object pointers don't hang around #87

Closed monich closed 2 years ago

monich commented 2 years ago

When an object is being finalized, other thread may re-reference the object right before it gets removed from the table (making ref_count greater than 1) and then quickly release that reference before g_object_unref() re-checks the refcount.

If that happens, the object may remain in the table by time when its finalize() callback is called. That applies both to local and remote objects.

We still have to invalidate the handle in dispose() callback because it's the last point when GObject can be legitimately re-referenced and brought back to life.