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

Reply via email to