[svn-commits] kpfleming: branch mogorman/zaptel-1.2-transcoder
r2047 - /team/mogorman/zapte...
svn-commits at lists.digium.com
svn-commits at lists.digium.com
Wed Jan 31 08:51:34 MST 2007
Author: kpfleming
Date: Wed Jan 31 09:51:33 2007
New Revision: 2047
URL: http://svn.digium.com/view/zaptel?view=rev&rev=2047
Log:
use kernel list macros for transcoder list instead of rolling our own
Modified:
team/mogorman/zaptel-1.2-transcoder/zaptel.h
team/mogorman/zaptel-1.2-transcoder/zttranscode.c
Modified: team/mogorman/zaptel-1.2-transcoder/zaptel.h
URL: http://svn.digium.com/view/zaptel/team/mogorman/zaptel-1.2-transcoder/zaptel.h?view=diff&rev=2047&r1=2046&r2=2047
==============================================================================
--- team/mogorman/zaptel-1.2-transcoder/zaptel.h (original)
+++ team/mogorman/zaptel-1.2-transcoder/zaptel.h Wed Jan 31 09:51:33 2007
@@ -45,6 +45,7 @@
#include <linux/interrupt.h>
#endif
#include <linux/fs.h>
+#include <linux/list.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
#define LINUX26
@@ -1419,7 +1420,7 @@
#define ZT_TC_FLAG_TRANSIENT (1 << 1)
struct zt_transcoder {
- struct zt_transcoder *next;
+ struct list_head list;
char name[80];
int numchannels;
unsigned int srcfmts;
Modified: team/mogorman/zaptel-1.2-transcoder/zttranscode.c
URL: http://svn.digium.com/view/zaptel/team/mogorman/zaptel-1.2-transcoder/zttranscode.c?view=diff&rev=2047&r1=2046&r2=2047
==============================================================================
--- team/mogorman/zaptel-1.2-transcoder/zttranscode.c (original)
+++ team/mogorman/zaptel-1.2-transcoder/zttranscode.c Wed Jan 31 09:51:33 2007
@@ -48,7 +48,7 @@
#endif
static int debug = 0;
-static struct zt_transcoder *trans;
+static LIST_HEAD(trans);
static spinlock_t translock = SPIN_LOCK_UNLOCKED;
EXPORT_SYMBOL(zt_transcoder_register);
@@ -69,6 +69,7 @@
memset(ztc, 0, size);
strcpy(ztc->name, "<unspecified>");
ztc->numchannels = numchans;
+ INIT_LIST_HEAD(&ztc->list);
for (x=0;x<ztc->numchannels;x++) {
init_waitqueue_head(&ztc->channels[x].ready);
ztc->channels[x].parent = ztc;
@@ -108,54 +109,46 @@
int zt_transcoder_register(struct zt_transcoder *tc)
{
struct zt_transcoder *cur;
- int res = -EBUSY;
spin_lock(&translock);
- for (cur = trans; cur; cur = cur->next) {
+ list_for_each_entry(cur, &trans, list) {
if (cur == tc) {
spin_unlock(&translock);
- return res;
+ return -EBUSY;
}
}
- tc->next = trans;
- trans = tc;
+ list_add(&tc->list, &trans);
printk("Registered codec translator '%s' with %d transcoders (srcs=%08x, dsts=%08x)\n",
tc->name, tc->numchannels, tc->srcfmts, tc->dstfmts);
- res = 0;
spin_unlock(&translock);
- return res;
+ return 0;
}
/* Unregister a transcoder */
int zt_transcoder_unregister(struct zt_transcoder *tc)
{
- struct zt_transcoder *cur, *prev;
- int res = -EINVAL;
+ struct zt_transcoder *cur, *next;
spin_lock(&translock);
- for (cur = trans, prev = NULL; cur; prev = cur, cur = cur->next) {
- if (cur == tc)
+ list_for_each_entry_safe(cur, next, &trans, list) {
+ if (cur == tc) {
+ list_del_init(&cur->list);
break;
+ }
}
if (!cur) {
spin_unlock(&translock);
- return res;
- }
-
- if (prev)
- prev->next = tc->next;
- else
- trans = tc->next;
- tc->next = NULL;
+ return -EINVAL;
+ }
+
printk("Unregistered codec translator '%s' with %d transcoders (srcs=%08x, dsts=%08x)\n",
tc->name, tc->numchannels, tc->srcfmts, tc->dstfmts);
- res = 0;
spin_unlock(&translock);
- return res;
+ return 0;
}
/* Alert a transcoder */
@@ -245,7 +238,7 @@
((*ztc)->dstfmt != zth->dstfmt)) {
/* Find new transcoder */
spin_lock(&translock);
- for (tc = trans; tc && !newztc; tc = tc->next) {
+ list_for_each_entry(tc, &trans, list) {
if (!(tc->srcfmts & zth->srcfmt))
continue;
@@ -307,7 +300,11 @@
return -EFAULT;
spin_lock(&translock);
- for (tc = trans, x = info.tcnum; tc && x; tc = tc->next, x--);
+ x = info.tcnum;
+ list_for_each_entry(tc, &trans, list) {
+ if (!x--)
+ break;
+ }
spin_unlock(&translock);
if (!tc)
More information about the svn-commits
mailing list