[ovs-dev] [PATCH] [RFC] lib/ovs-thread: set pthread stack size to 128k

Russell Bryant russell at ovn.org
Sun Jan 24 21:24:01 UTC 2016


On 01/24/2016 08:56 AM, Alexandru Ardelean wrote:
> Seems that musl libc's default thread stack size is 80k, which
> causes a segfault (stack overflow actually) when trying to add
> a bridge (via the "ovs-vsctl add-br" command).
> 
> OpenWRT has been switching to musl libc for a few months now.
> So far, we've been using OVS with uClibc, so I did not catch this
> earlier.
> 
> This patch is a RFC:
> - is this thread stack size sufficient ?
> - is this approach acceptable ?
> 
> In OpenWRT we'll use this patch since it works.
> 
> Issue was found and fixed by Robert McKay.
> I fine tuned his patch and will add it to our OVS package
> in OpenWRT.
> 
> Signed-off-by: Robert McKay <robert at mckay.com>
> Signed-off-by: Alexandru Ardelean <ardeleanalex at gmail.com>
> ---
>  lib/ovs-thread.c |    5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/ovs-thread.c b/lib/ovs-thread.c
> index 7855b3a..e35ddba 100644
> --- a/lib/ovs-thread.c
> +++ b/lib/ovs-thread.c
> @@ -347,6 +347,7 @@ ovs_thread_create(const char *name, void *(*start)(void *), void *arg)
>  {
>      struct ovsthread_aux *aux;
>      pthread_t thread;
> +    pthread_attr_t attr;
>      int error;
>  
>      forbid_forking("multiple threads exist");
> @@ -358,7 +359,9 @@ ovs_thread_create(const char *name, void *(*start)(void *), void *arg)
>      aux->arg = arg;
>      ovs_strlcpy(aux->name, name, sizeof aux->name);
>  
> -    error = pthread_create(&thread, NULL, ovsthread_wrapper, aux);
> +    pthread_attr_init(&attr);
> +    pthread_attr_setstacksize(&attr, 128*1024);
> +    error = pthread_create(&thread, &attr, ovsthread_wrapper, aux);
>      if (error) {
>          ovs_abort(error, "pthread_create failed");
>      }
> 

I don't actually have feedback on the more important question of how
best to deal with your issue, but fwiw, you need a
pthread_attr_destroy() after pthread_create().

-- 
Russell Bryant



More information about the dev mailing list