|
|
@@ -115,7 +115,9 @@ static void rd_write(struct msm_rd_state *rd, const void *buf, int sz)
|
|
|
char *fptr = &fifo->buf[fifo->head];
|
|
|
int n;
|
|
|
|
|
|
- wait_event(rd->fifo_event, circ_space(&rd->fifo) > 0);
|
|
|
+ wait_event(rd->fifo_event, circ_space(&rd->fifo) > 0 || !rd->open);
|
|
|
+ if (!rd->open)
|
|
|
+ return;
|
|
|
|
|
|
/* Note that smp_load_acquire() is not strictly required
|
|
|
* as CIRC_SPACE_TO_END() does not access the tail more
|
|
|
@@ -213,7 +215,10 @@ out:
|
|
|
static int rd_release(struct inode *inode, struct file *file)
|
|
|
{
|
|
|
struct msm_rd_state *rd = inode->i_private;
|
|
|
+
|
|
|
rd->open = false;
|
|
|
+ wake_up_all(&rd->fifo_event);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|