summaryrefslogtreecommitdiff
path: root/zaptel.c
diff options
context:
space:
mode:
authormattf <mattf@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2007-03-30 21:07:03 +0000
committermattf <mattf@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2007-03-30 21:07:03 +0000
commite5a4426d6f65ea15712df1f020c3551a0c8c7fc6 (patch)
treeeb919300b9ed1d2b0ace205e8763e4fdf6cd95a6 /zaptel.c
parent8e420caf96b062970862202139a827930762d025 (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.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/zaptel.c b/zaptel.c
index 65e7426..5f01539 100644
--- a/zaptel.c
+++ b/zaptel.c
@@ -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;