| .. | .. |
|---|
| 50 | 50 | #include <linux/netdevice.h> |
|---|
| 51 | 51 | #include <linux/etherdevice.h> |
|---|
| 52 | 52 | #include <linux/gsmmux.h> |
|---|
| 53 | +#include "tty.h" |
|---|
| 53 | 54 | |
|---|
| 54 | 55 | static int debug; |
|---|
| 55 | 56 | module_param(debug, int, 0600); |
|---|
| .. | .. |
|---|
| 2158 | 2159 | static void gsm_cleanup_mux(struct gsm_mux *gsm, bool disc) |
|---|
| 2159 | 2160 | { |
|---|
| 2160 | 2161 | int i; |
|---|
| 2161 | | - struct gsm_dlci *dlci = gsm->dlci[0]; |
|---|
| 2162 | + struct gsm_dlci *dlci; |
|---|
| 2162 | 2163 | struct gsm_msg *txq, *ntxq; |
|---|
| 2163 | 2164 | |
|---|
| 2164 | 2165 | gsm->dead = true; |
|---|
| 2165 | 2166 | mutex_lock(&gsm->mutex); |
|---|
| 2166 | 2167 | |
|---|
| 2168 | + dlci = gsm->dlci[0]; |
|---|
| 2167 | 2169 | if (dlci) { |
|---|
| 2168 | 2170 | if (disc && dlci->state != DLCI_CLOSED) { |
|---|
| 2169 | 2171 | gsm_dlci_begin_close(dlci); |
|---|
| .. | .. |
|---|
| 2177 | 2179 | |
|---|
| 2178 | 2180 | /* Free up any link layer users and finally the control channel */ |
|---|
| 2179 | 2181 | for (i = NUM_DLCI - 1; i >= 0; i--) |
|---|
| 2180 | | - if (gsm->dlci[i]) |
|---|
| 2182 | + if (gsm->dlci[i]) { |
|---|
| 2181 | 2183 | gsm_dlci_release(gsm->dlci[i]); |
|---|
| 2184 | + gsm->dlci[i] = NULL; |
|---|
| 2185 | + } |
|---|
| 2182 | 2186 | mutex_unlock(&gsm->mutex); |
|---|
| 2183 | 2187 | /* Now wipe the queues */ |
|---|
| 2184 | 2188 | tty_ldisc_flush(gsm->tty); |
|---|