|
@@ -453,6 +453,11 @@ int tipc_conn_sendmsg(struct tipc_server *s, int conid,
|
|
|
if (!con)
|
|
|
return -EINVAL;
|
|
|
|
|
|
+ if (!test_bit(CF_CONNECTED, &con->flags)) {
|
|
|
+ conn_put(con);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
e = tipc_alloc_entry(data, len);
|
|
|
if (!e) {
|
|
|
conn_put(con);
|
|
@@ -466,12 +471,8 @@ int tipc_conn_sendmsg(struct tipc_server *s, int conid,
|
|
|
list_add_tail(&e->list, &con->outqueue);
|
|
|
spin_unlock_bh(&con->outqueue_lock);
|
|
|
|
|
|
- if (test_bit(CF_CONNECTED, &con->flags)) {
|
|
|
- if (!queue_work(s->send_wq, &con->swork))
|
|
|
- conn_put(con);
|
|
|
- } else {
|
|
|
+ if (!queue_work(s->send_wq, &con->swork))
|
|
|
conn_put(con);
|
|
|
- }
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -495,7 +496,7 @@ static void tipc_send_to_sock(struct tipc_conn *con)
|
|
|
int ret;
|
|
|
|
|
|
spin_lock_bh(&con->outqueue_lock);
|
|
|
- while (1) {
|
|
|
+ while (test_bit(CF_CONNECTED, &con->flags)) {
|
|
|
e = list_entry(con->outqueue.next, struct outqueue_entry,
|
|
|
list);
|
|
|
if ((struct list_head *) e == &con->outqueue)
|