diff options
author | mattf <mattf@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2007-03-30 21:07:03 +0000 |
---|---|---|
committer | mattf <mattf@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2007-03-30 21:07:03 +0000 |
commit | e5a4426d6f65ea15712df1f020c3551a0c8c7fc6 (patch) | |
tree | eb919300b9ed1d2b0ace205e8763e4fdf6cd95a6 /zaptel.c | |
parent | 8e420caf96b062970862202139a827930762d025 (diff) |
Merged revisions 2359 via svnmerge from
https://origsvn.digium.com/svn/zaptel/branches/1.4
........
r2359 | mattf | 2007-03-30 15:03:19 -0600 (Fri, 30 Mar 2007) | 2 lines
Fix potential spinlock recursion issue.
........
git-svn-id: http://svn.digium.com/svn/zaptel/trunk@2360 5390a7c7-147a-4af0-8ec9-7488f05a26cb
Diffstat (limited to 'zaptel.c')
-rw-r--r-- | zaptel.c | 29 |
1 files changed, 17 insertions, 12 deletions
@@ -6260,6 +6260,22 @@ static inline void __zt_putbuf_chunk(struct zt_chan *ss, unsigned char *rxb) __putbuf_chunk(ss, rxb, ZT_CHUNKSIZE); } +extern void __zt_hdlc_abort(struct zt_chan *ss, int event) +{ + if (ss->inreadbuf >= 0) + ss->readidx[ss->inreadbuf] = 0; + if ((ss->flags & ZT_FLAG_OPEN) && !ss->span->alarms) + __qevent(ss->master, event); +} + +extern void zt_hdlc_abort(struct zt_chan *ss, int event) +{ + unsigned long flags; + spin_lock_irqsave(&ss->lock, flags); + __zt_hdlc_abort(ss, event); + spin_unlock_irqrestore(&ss->lock, flags); +} + extern void zt_hdlc_putbuf(struct zt_chan *ss, unsigned char *rxb, int bytes) { unsigned long flags; @@ -6289,23 +6305,12 @@ extern void zt_hdlc_putbuf(struct zt_chan *ss, unsigned char *rxb, int bytes) #ifdef CONFIG_ZAPATA_DEBUG printk("HDLC frame isn't fit into buffer space\n"); #endif - zt_hdlc_abort(ss, ZT_EVENT_OVERRUN); + __zt_hdlc_abort(ss, ZT_EVENT_OVERRUN); } res = left; spin_unlock_irqrestore(&ss->lock, flags); } -extern void zt_hdlc_abort(struct zt_chan *ss, int event) -{ - unsigned long flags; - spin_lock_irqsave(&ss->lock, flags); - if (ss->inreadbuf >= 0) - ss->readidx[ss->inreadbuf] = 0; - if ((ss->flags & ZT_FLAG_OPEN) && !ss->span->alarms) - __qevent(ss->master, event); - spin_unlock_irqrestore(&ss->lock, flags); -} - extern void zt_hdlc_finish(struct zt_chan *ss) { int oldreadbuf; |