[pulseaudio-discuss] [PATCH 0/4] Error handling and its documentation in the public API

Peter Meerwald pmeerw at pmeerw.net
Sun Jan 1 13:27:35 PST 2012


Hello Tanu,

> I have started to go through all functions in the public API
> (currently 359 functions - this will take some time),
> prompted by the discussion that started from this patch:
> http://lists.freedesktop.org/archives/pulseaudio-discuss/2011-December/012412.html

thank you for picking up the idea; my original intention was a lot more 
modest than checking and improving the entire API: I just wanted to state 
how error information is handled in the PA API

I am working on a simple statement to go into the doxygen for 
pulseaudio.h, here's my current draft:

+ * \section error_sec Error Handling
+ *
+ * The PulseAudio API indicates error conditions by returning a negative
+ * integer value or a NULL pointer. On success, a positive integer value
+ * or a valid pointer is returned.
+ *
+ * Functions of the \ref simple generally return -1 or NULL on failure and
+ * can optionally store an error code (see ::pa_error_code) using a pointer
+ * argument.
+ *
+ * Functions of the \ref async return an negative error code or NULL on
+ * failure (see ::pa_error_code). In the later case, pa_context_errno() 
+ * can be used to obtain the error code of the last failed operation.
+ *
+ * An error code can be turned into a human readable message using
+ * pa_strerror().
+ *

> Instead of waiting until I'm finished with all patches, I'll
> send the first patches already now in case there are
> comments regarding the overall goals. I intend to make sure
> that each function documents how (non-programmer) errors are
> reported to the caller.

I think we should first agree on the general description (see my 
suggestion above)

here is a list of my concerns:

- is it error code (e.g. def.h), error value or error number (e.g. 
pa_context_errno())?

- functions may indicate an error condition without setting 
context error (does it happen?);

- functions may set the context errno without indicating an error 
condition to the caller (does it happen?); related question: how long is 
context errno valid?
one could state something like (taken from errno(3)):
"Its value is significant only when the return value of the call indicated 
an error; a function that succeeds is allowed to change errno."

- does the following hold?

int ret = pa_foo();
if (ret < 0)
  assert(ret == -pa_context_errno(c));

> I also intend to make sure that no function in the public
> API returns a generic -1 as the return value to represent
> error (unless explicitly documented). When errors are
> reported using a negative number, the number should be
> suitable for passing to pa_strerror(). pa_strerror() maps -1
> to "Access denied", which usually is very misleading.

agree; interestingly pa_strerror() accepts both positive and negative 
values

coming from the Simple API at first, I found the different error handling 
semantics for the Async API quite confusing

Simple API .. -1 on error
Async API .. -errno

regards, p.

-- 

Peter Meerwald
+43-664-2444418 (mobile)


More information about the pulseaudio-discuss mailing list