diff -u -p linux/include/net/irda/irlmp.d7.h linux/include/net/irda/irlmp.h --- linux/include/net/irda/irlmp.d7.h Wed Apr 10 18:32:46 2002 +++ linux/include/net/irda/irlmp.h Fri Apr 12 09:54:54 2002 @@ -278,6 +278,8 @@ static inline void irlmp_listen(struct l self->dlsap_sel = LSAP_ANY; self->lap = NULL; self->lsap_state = LSAP_DISCONNECTED; + /* Started when we received the LM_CONNECT_INDICATION */ + del_timer(&self->watchdog_timer); } #endif diff -u -p linux/net/irda/irlmp.d7.c linux/net/irda/irlmp.c --- linux/net/irda/irlmp.d7.c Wed Apr 10 18:20:24 2002 +++ linux/net/irda/irlmp.c Wed Apr 10 18:27:26 2002 @@ -236,6 +236,16 @@ void irlmp_close_lsap(struct lsap_cb *se lap = self->lap; if (lap) { ASSERT(lap->magic == LMP_LAP_MAGIC, return;); + /* We might close a LSAP before it has completed the + * connection setup. In those case, higher layers won't + * send a proper disconnect request. Harmless, except + * that we will forget to close LAP... - Jean II */ + if(self->lsap_state != LSAP_DISCONNECTED) { + self->lsap_state = LSAP_DISCONNECTED; + irlmp_do_lap_event(self->lap, + LM_LAP_DISCONNECT_REQUEST, NULL); + } + /* Now, remove from the link */ lsap = hashbin_remove(lap->lsaps, (int) self, NULL); } self->lap = NULL; diff -u -p linux/net/irda/parameters.d7.c linux/net/irda/parameters.c --- linux/net/irda/parameters.d7.c Fri Apr 12 14:45:08 2002 +++ linux/net/irda/parameters.c Fri Apr 12 14:45:29 2002 @@ -28,6 +28,7 @@ * ********************************************************************/ +#include #include #include