On Fri, 2013-09-20 at 17:27 +0530, Arun Raghavan wrote: > 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 */ > }; > It's sad that this is needed, but ack. (I have probably said this earlier: I'd like ports to not require refcounting, in which case they would probably be always owned by cards.) -- Tanu