----- On Jun 15, 2017, at 9:02 AM, Denis Yevgenyevich 
<denis.yevgenyev...@gmail.com> wrote: 

> My memory-constrained application dumps core saying

> Assertion failed: (!ret), function _cds_wfcq_init, file
> ./urcu/static/wfcqueue.h, line 107.
> Abort

> The function was called from the call_rcu thread, my app does not call 
> wfcqueue
> directly.

> My operating system is FreeBSD-10.3, you won't reproduce the failure in Linux.
> Apparently developers assumed that pthread_mutex_init cannot fail. This
> assumption is ok for Linux, but not so with FreeBSD, which allocates mutexes
> with calloc.

> Could you please add proper error handling so that (at least) call_rcu threads
> could cope with memory allocation failures?

> Cheers...

Hi, 

There are interfaces in liburcu such as rcu_read_lock and call_rcu for which we 
don't want to impose error-handling to users. And in a vast majority of 
applications, 
aborting on memory allocation failure appears to be acceptable. So let's see 
how 
we could allow special use-cases like yours to be fulfilled without making the 
API 
needlessly complex. 

One possibility would be to add optional handling of out-of-memory scenarios 
through handlers registered by the application. An application could then use 
setjmp before calling liburcu functions and longjmp from the registered handler 
to recover from those errors. Of course, liburcu would have to ensure it's 
undoing 
its side-effects before invoking the application-provided out-of-memory 
handler. 

Thoughts ? 

Thanks, 

Mathieu 

> _______________________________________________
> lttng-dev mailing list
> lttng-dev@lists.lttng.org
> https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

-- 
Mathieu Desnoyers 
EfficiOS Inc. 
http://www.efficios.com 
_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to