This will be needed if the implementation data stores pointers to additional data that needs to be freed as well. --- src/pulsecore/device-port.c | 3 +++ src/pulsecore/device-port.h | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/pulsecore/device-port.c b/src/pulsecore/device-port.c index 0b65d5c..ac2c95e 100644 --- a/src/pulsecore/device-port.c +++ b/src/pulsecore/device-port.c @@ -94,6 +94,9 @@ static void device_port_free(pa_object *o) { pa_assert(p); pa_assert(pa_device_port_refcnt(p) == 0); + if (p->impl_free) + p->impl_free(p); + if (p->proplist) pa_proplist_free(p->proplist); diff --git a/src/pulsecore/device-port.h b/src/pulsecore/device-port.h index b10d554..b5e80a5 100644 --- a/src/pulsecore/device-port.h +++ b/src/pulsecore/device-port.h @@ -54,6 +54,9 @@ struct pa_device_port { pa_direction_t direction; int64_t latency_offset; + /* Free the extra implementation specific data. Called before other members are freed. */ + void (*impl_free)(pa_device_port *port); + /* .. followed by some implementation specific data */ }; -- 1.8.3.1