spcom: avoid using stale glink handle

spcom_notify_state() is a callback called by glink upon channel connect.
It is asynchronous callback, that might be called after glink_close().
Avoid storing stale glink handle in such case.

Change-Id: I10359f38ca48f618899673f677a6409b01bc6618
Signed-off-by: Amir Samuelov <amirs@codeaurora.org>
This commit is contained in:
Amir Samuelov 2017-09-24 16:32:28 +03:00 committed by Gerrit - the friendly Code Review server
parent 22b400edb3
commit 7ced3825df

View file

@ -493,13 +493,10 @@ static void spcom_notify_state(void *handle, const void *priv, unsigned event)
ch->glink_state = event; ch->glink_state = event;
/* if (!handle) {
* if spcom_notify_state() is called within glink_open() pr_err("inavlid glink_handle, ch [%s].\n", ch->name);
* then ch->glink_handle is not updated yet. mutex_unlock(&ch->lock);
*/ return;
if (!ch->glink_handle) {
pr_debug("update glink_handle, ch [%s].\n", ch->name);
ch->glink_handle = handle;
} }
/* signal before unlock mutex & before calling glink */ /* signal before unlock mutex & before calling glink */
@ -512,8 +509,7 @@ static void spcom_notify_state(void *handle, const void *priv, unsigned event)
*/ */
pr_debug("call glink_queue_rx_intent() ch [%s].\n", ch->name); pr_debug("call glink_queue_rx_intent() ch [%s].\n", ch->name);
ret = glink_queue_rx_intent(ch->glink_handle, ret = glink_queue_rx_intent(handle, ch, ch->rx_buf_size);
ch, ch->rx_buf_size);
if (ret) { if (ret) {
pr_err("glink_queue_rx_intent() err [%d]\n", ret); pr_err("glink_queue_rx_intent() err [%d]\n", ret);
} else { } else {