alsa-python: add register_poll to alsaseq
PATCH 1/1 alsa-python: add register_poll to alsaseq
Attached patch adds register_poll to the sequencer bindings to support nonblocking sequencer access with the select module.
Signature · 2 lines
Hector Martin ([email protected]) Public Key: http://www.marcansoft.com/marcan.asc
Quoted 1 line
From
db1a07ad9e9076f258d1ff871955eedc7d34ae9cMon Sep 17 00:00:00 2001
From: Hector Martin <[email protected]>
Date: Wed, 21 Apr 2010 05:54:49 +0200
Subject: [PATCH] Add register_poll for alsaseq
--- pyalsa/alsaseq.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 53 insertions(+), 0 deletions(-)
pyalsa/alsaseq.c +53 -0
@@ -3236,6 +3236,55 @@ Sequencer_stop_queue(SequencerObject *self, Py_RETURN_NONE; } +PyDoc_STRVAR (Sequencer_registerpoll__doc__, +"register_poll(pollObj, input=False, output=False) -- Register poll file descriptors." ); + +static PyObject * +Sequencer_registerpoll (SequencerObject *self,PyObject *args,PyObject *kwds) +{ +PyObject *pollObj, *reg, *t; +struct pollfd *pfd; +int i, count; +int input =0 ; +int output =0 ; +int mode =POLLIN |POLLOUT ; + +static char * kwlist[] = {"pollObj" ,"input" ,"output" ,NULL }; + +if (!PyArg_ParseTupleAndKeywords (args, kwds,"O|ii" , kwlist, &pollObj, &input, &output)) +return NULL ; + +if (input && !output) + mode =POLLIN ; +else if (!input && output) + mode =POLLOUT ; + + count =snd_seq_poll_descriptors_count (self->handle, mode); +if (count <=0 ) + Py_RETURN_NONE; + pfd =malloc (sizeof (struct pollfd ) * count); +if (pfd ==NULL ) + Py_RETURN_NONE; + count =snd_seq_poll_descriptors (self->handle, pfd, count, mode); +if (count <=0 ) + Py_RETURN_NONE; + + reg =PyObject_GetAttr (pollObj,PyString_InternFromString ("register" )); + +for (i =0 ; i < count; i++) { + t =PyTuple_New (2 ); +if (t) { +PyTuple_SET_ITEM (t,0 ,PyInt_FromLong (pfd[i].fd)); +PyTuple_SET_ITEM (t,1 ,PyInt_FromLong (pfd[i].events)); +Py_XDECREF (PyObject_CallObject (reg, t)); +Py_DECREF (t); + } + } + +Py_XDECREF (reg); + + Py_RETURN_NONE; +}
@@ -3309,6 +3358,10 @@ static PyMethodDef Sequencer_methods[] = { (PyCFunction ) Sequencer_stop_queue,METH_VARARGS |METH_KEYWORDS , Sequencer_stop_queue__doc__}, + {"register_poll", + (PyCFunction ) Sequencer_registerpoll, +METH_VARARGS |METH_KEYWORDS , + Sequencer_registerpoll__doc__}, {NULL} };
Signature · 1 line
1.6.4.4
_______________________________________________
Alsa-devel mailing list
[email protected]
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
Quoted 11 lines · Hector Martin
Attached patch adds
register_pollto the sequencer bindings to support nonblocking sequencer access with the select module.From
db1a07ad9e9076f258d1ff871955eedc7d34ae9cMon Sep 17 00:00:00 2001
From: Hector Martin <[email protected]>
Date: Wed, 21 Apr 2010 05:54:49 +0200
Subject: [PATCH] Addregister_pollfor alsaseq--- pyalsa/alsaseq.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 53 insertions(+), 0 deletions(-)
Please provide a Signed-off-by tag; we use this also for non-kernel code.
Quoted 1 line
+ pfd =
malloc(sizeof(struct pollfd) * count);
This isn't freed; better use alloca().
Regards,
Clemens
Quoted 1 line · Clemens Ladisch
Please provide a Signed-off-by tag; we use this also for non-kernel code.
Done.
Quoted 1 line
This isn't freed; better use
alloca().
Whoops. I see this got fixed on hcontrol with 866af7359. I based my patch on 1.0.21's hcontrol so I missed that fix.
New patch attached.
Signature · 2 lines
Hector Martin ([email protected]) Public Key: http://www.marcansoft.com/marcan.asc
Quoted 1 line
From
f801ff2f940b24c3ee3f27271ec4b249a2c67fb8Mon Sep 17 00:00:00 2001
From: Hector Martin <[email protected]>
Date: Wed, 21 Apr 2010 05:54:49 +0200
Subject: [PATCH] Add register_poll for alsaseq
--- pyalsa/alsaseq.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 51 insertions(+), 0 deletions(-)
pyalsa/alsaseq.c +51 -0
@@ -3236,6 +3236,53 @@ Sequencer_stop_queue(SequencerObject *self, Py_RETURN_NONE; } +PyDoc_STRVAR (Sequencer_registerpoll__doc__, +"register_poll(pollObj, input=False, output=False) -- Register poll file descriptors." ); + +static PyObject * +Sequencer_registerpoll (SequencerObject *self,PyObject *args,PyObject *kwds) +{ +PyObject *pollObj, *reg, *t; +struct pollfd *pfd; +int i, count; +int input =0 ; +int output =0 ; +int mode =POLLIN |POLLOUT ; + +static char * kwlist[] = {"pollObj" ,"input" ,"output" ,NULL }; + +if (!PyArg_ParseTupleAndKeywords (args, kwds,"O|ii" , kwlist, &pollObj, &input, &output)) +return NULL ; + +if (input && !output) + mode =POLLIN ; +else if (!input && output) + mode =POLLOUT ; + + count =snd_seq_poll_descriptors_count (self->handle, mode); +if (count <=0 ) + Py_RETURN_NONE; + pfd =alloca (sizeof (struct pollfd ) * count); + count =snd_seq_poll_descriptors (self->handle, pfd, count, mode); +if (count <=0 ) + Py_RETURN_NONE; + + reg =PyObject_GetAttr (pollObj,PyString_InternFromString ("register" )); + +for (i =0 ; i < count; i++) { + t =PyTuple_New (2 ); +if (t) { +PyTuple_SET_ITEM (t,0 ,PyInt_FromLong (pfd[i].fd)); +PyTuple_SET_ITEM (t,1 ,PyInt_FromLong (pfd[i].events)); +Py_XDECREF (PyObject_CallObject (reg, t)); +Py_DECREF (t); + } + } + +Py_XDECREF (reg); + + Py_RETURN_NONE; +}
@@ -3309,6 +3356,10 @@ static PyMethodDef Sequencer_methods[] = { (PyCFunction ) Sequencer_stop_queue,METH_VARARGS |METH_KEYWORDS , Sequencer_stop_queue__doc__}, + {"register_poll", + (PyCFunction ) Sequencer_registerpoll, +METH_VARARGS |METH_KEYWORDS , + Sequencer_registerpoll__doc__}, {NULL} };
Signature · 1 line
1.6.4.4
_______________________________________________
Alsa-devel mailing list
[email protected]
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel