diff options
Diffstat (limited to 'apps/netutils')
-rw-r--r-- | apps/netutils/telnetd/telnetd_driver.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/apps/netutils/telnetd/telnetd_driver.c b/apps/netutils/telnetd/telnetd_driver.c index 7d36e9d2d..eb43012c4 100644 --- a/apps/netutils/telnetd/telnetd_driver.c +++ b/apps/netutils/telnetd/telnetd_driver.c @@ -518,8 +518,12 @@ static int telnetd_close(FAR struct file *filep) psock_close(&priv->td_psock); - /* Release the driver memory. What if there are threads - * waiting on td_exclsem? They will never be awakened! + /* Release the driver memory. What if there are threads waiting on + * td_exclsem? They will never be awakened! How could this happen? + * crefs == 1 so there are no other open references to the driver. + * But this could have if someone were trying to re-open the driver + * after every other thread has closed it. That really should not + * happen in the intended usage model. */ DEBUGASSERT(priv->td_exclsem.semcount == 0); @@ -733,6 +737,8 @@ FAR char *telnetd_driver(int sd, FAR struct telnetd_s *daemon) /* Initialize the allocated driver instance */ + sem_init(&priv->td_exclsem, 0, 1); + priv->td_state = STATE_NORMAL; priv->td_crefs = 0; priv->td_pending = 0; |