[pulseaudio-discuss] [patches] constification round #3

jnqnfe at gmail.com jnqnfe at gmail.com
Tue Jun 19 16:39:35 UTC 2018


On Mon, 2018-06-18 at 10:47 +0300, Tanu Kaskinen wrote:
> On Fri, 2018-06-15 at 21:34 +0100, jnqnfe at gmail.com wrote:
> > On Fri, 2018-06-15 at 14:15 +0300, Tanu Kaskinen wrote:
> > > On Thu, 2018-06-07 at 05:01 +0100, jnqnfe at gmail.com wrote:
> > > > API constification set #3
> > > > 
> > > > Some API functions perform validation routines which may modify
> > > > the
> > > > 'error' attribute of a context object. For API functions where
> > > > the
> > > > "primary" object is not a context object, and the object holds
> > > > a
> > > > non-
> > > > const context pointer, this internal mechanism could be
> > > > successfully
> > > > hidden - such functions were constified in my previous two
> > > > patch
> > > > sets.
> > > > 
> > > > However, some functions, namely those related directly to
> > > > context
> > > > objects, had to be passed over previously. These could not be
> > > > constified because the validation routines accessed the context
> > > > object
> > > > directly to change the error attribute.
> > > > 
> > > > This patch set addresses this shortcoming.
> > > > 
> > > > Firstly the patch set moves the context's error attribute
> > > > behind a
> > > > pointer. The validation routines are then changed to store the
> > > > error
> > > > value via this pointer. That then allows a collection of
> > > > further
> > > > API
> > > > functions to be constified.
> > > > 
> > > > (actually pa_context_errno and the two rttime ones could have
> > > > been
> > > > done
> > > > previously on second inspection)
> > > > 
> > > > Although the indirection of the error attribute is obviously
> > > > ever
> > > > so
> > > > slightly worse off for efficiency, it is surely worth the
> > > > price.
> > > > After
> > > > all, the error setting of the validation checks is just an
> > > > artifact
> > > > of
> > > > an internal mechanism and should not be allowed to influence
> > > > the
> > > > public
> > > > API like it currently does.
> > > 
> > > Thanks! I applied patches 1 and 4. Patches 2 and 3 seem
> > > unnecessarily
> > > complicated, wouldn't it be better to just constify
> > > pa_context_set_error()?
> > 
> > It would certainly be more simple, but I would say that it comes
> > down
> > to perceived purpose of a `pa_context_set_error` function.
> > Logically
> > any and all `pa_context_set_*` functions should be expected to
> > mutate
> > the context object in some way and thus take a non-const pointer.
> > Diverging from this in general risks confusion (even though it's
> > internal only), and as a rule I'd err away from making such a
> > function
> > immutable just because an implementation detail allows you to,
> > that's
> > why I went down the route I did.
> > 
> > On the other hand if this function were renamed to something that
> > sufficiently conveyed a 'modify internal mutable component of
> > otherwise
> > immutable object' purpose, with an explanation in the
> > documentation,
> > then that could be perfectly sufficient (perhaps
> > `pa_context_set_internal_error` would do), but then you're risking
> > pushing implementation detail (via the name) out to every place in
> > the
> > library that wants to set an error value, not just the validation
> > routines. Is that acceptable?
> > 
> > Ultimately though it's not at all important to me, I'm happy for
> > you
> > guys to go whatever way you decide and I'm not going to kick up a
> > fuss
> > if you do what you suggest. :)
> 
> Your patches are based on the view that setting the error code isn't
> considered mutating the context object. I think constifying
> pa_context_set_error() is fully in line with that view. Or do you
> think
> that when the validation macros set the code, that's not mutating the
> context object, but when other code calls pa_context_set_error(),
> that
> is mutating the context object?

Yes, the latter.

> Anyway, I'll send the constification patch.

Ok :)


More information about the pulseaudio-discuss mailing list