Justus Winter, le Sat 04 Apr 2015 18:38:53 +0200, a écrit : > * NEWS: Mention protected payloads. > * libports/Makefile (SRCS): Add `port-deref-deferred.c'. > * libports/create-internal.c (_ports_create_port_internal): Set the > protected payload to the objects address. > * libports/import-port.c (ports_import_port): Likewise. > * libports/reallocate-from-external.c (ports_reallocate_from_external): > Likewise. > * libports/reallocate-port.c (ports_reallocate_port): Likewise. > * libports/transfer-right.c (ports_transfer_right): Likewise. > * libports/manage-multithread.c (ports_manage_port_operations_multithread): > Use the protected payload for the object lookup if provided. Add > thread pool management calls. > * libports/manage-one-thread.c (ports_manage_port_operations_one_thread): > Likewise. > * libports/destroy-right.c (ports_destroy_right): Defer the > dereferencing of outstanding send rights to avoid a port_info > use-after-free. > * libports/port-deref-deferred.c: New file. > * libports/port-deref-deferred.h: Likewise. > * libports/ports.h (struct port_bucket): New field `threadpool'. > (ports_lookup_payload): Check `port_right'.
Indeed, this is a quite elegant solution. Please just add some explanations to port-deref-deferred at least to explicit what "old" and "young" mean, and thus the transition at quiescent state, and then push. Samuel