From ad70160847c35231bbbdd345052980c037786815 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 26 Sep 2012 14:01:39 +0200 Subject: [PATCH] LWIP: Fix dead lock in semaphore back-end Make sure unlock is called when 'global_mutex' reaches zero count. Add verbose variable in order to disable some output. Disable irritating 'Overflow' messages in 'sys_mbox_post' and 'sys_mbox_try_post' per default. This may happen and is not an error, since the ring buffer is full and will be emptied eventually. Remove priority from genode_org run script. Should fix #347 --- libports/src/lib/lwip/include/verbose.h | 22 ++++++++++++++++++++++ libports/src/lib/lwip/platform/nic.cc | 4 +++- libports/src/lib/lwip/platform/sys_arch.cc | 12 ++++++++---- ports/run/genode_org.run | 2 +- 4 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 libports/src/lib/lwip/include/verbose.h diff --git a/libports/src/lib/lwip/include/verbose.h b/libports/src/lib/lwip/include/verbose.h new file mode 100644 index 000000000..a39887635 --- /dev/null +++ b/libports/src/lib/lwip/include/verbose.h @@ -0,0 +1,22 @@ +/* + * \brief Enable debugging output + * \author Sebastian Sumpf + * \date 2012-09-26 + */ + +/* + * Copyright (C) 2009-2012 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU General Public License version 2. + */ + +#ifndef _LWIP__VERBOSE_H_ +#define _LWIP__VERBOSE_H_ + +/** + * Set to one for more output + */ +static int verbose = 0; + +#endif //_LWIP__VERBOSE_H_ diff --git a/libports/src/lib/lwip/platform/nic.cc b/libports/src/lib/lwip/platform/nic.cc index bdbd03d6b..f626422ad 100644 --- a/libports/src/lib/lwip/platform/nic.cc +++ b/libports/src/lib/lwip/platform/nic.cc @@ -23,6 +23,7 @@ extern "C" { #include #include #include +#include } /* Genode includes */ @@ -217,7 +218,8 @@ extern "C" { if (p == NULL) return; if (netif->input(p, netif) != ERR_OK) { - PERR("genode_netif_input: input error"); + if (verbose) + PERR("genode_netif_input: input error"); pbuf_free(p); p = 0; } diff --git a/libports/src/lib/lwip/platform/sys_arch.cc b/libports/src/lib/lwip/platform/sys_arch.cc index 71dc4b3f5..4b7b47dda 100644 --- a/libports/src/lib/lwip/platform/sys_arch.cc +++ b/libports/src/lib/lwip/platform/sys_arch.cc @@ -23,6 +23,7 @@ #include #include #include +#include namespace Lwip { @@ -352,12 +353,13 @@ extern "C" { { if(global_mutex()->thread != Genode::Thread_base::myself()) return; - if(global_mutex()->counter > 0) + if(global_mutex()->counter > 1) global_mutex()->counter--; else { + global_mutex()->counter = 0; global_mutex()->thread = 0; global_mutex()->lock.unlock(); - } + } } @@ -456,7 +458,8 @@ extern "C" { _mbox->add(msg); return; } catch (Mailbox::Overflow) { - PWRN("Overflow exception!"); + if (verbose) + PWRN("Overflow exception!"); } catch (...) { PERR("Unknown Exception occured!"); } @@ -481,7 +484,8 @@ extern "C" { _mbox->add(msg); return ERR_OK; } catch (Mailbox::Overflow) { - PWRN("Overflow exception!"); + if (verbose) + PWRN("Overflow exception!"); } catch (...) { PERR("Unknown Exception occured!"); } diff --git a/ports/run/genode_org.run b/ports/run/genode_org.run index ab2c8e6c6..81bc5c8d7 100644 --- a/ports/run/genode_org.run +++ b/ports/run/genode_org.run @@ -54,7 +54,7 @@ append_if [have_spec pci] config { } append_if [have_spec omap4] config { - +