diff --git a/alsaaudio.c b/alsaaudio.c index ef900ea..a8b5316 100644 --- a/alsaaudio.c +++ b/alsaaudio.c @@ -652,6 +652,7 @@ static PyObject *alsapcm_write(alsapcm_t *self, PyObject *args) int res; int datalen; char *data; + PyObject *rc = NULL; #if PY_MAJOR_VERSION < 3 if (!PyArg_ParseTuple(args,"s#:write",&data,&datalen)) @@ -690,15 +691,22 @@ static PyObject *alsapcm_write(alsapcm_t *self, PyObject *args) } Py_END_ALLOW_THREADS - if (res == -EAGAIN) - return PyLong_FromLong(0); + if (res == -EAGAIN) { + rc = PyLong_FromLong(0); + } else if (res < 0) { PyErr_SetString(ALSAAudioError,snd_strerror(res)); - return NULL; } + else { + rc = PyLong_FromLong(res); + } + +#if PY_MAJOR_VERSION >= 3 + PyBuffer_Release(&buf); +#endif - return PyLong_FromLong(res); + return rc; } PyDoc_STRVAR(write_doc, diff --git a/play_rusage.py b/play_rusage.py new file mode 100644 index 0000000..d7fa62d --- /dev/null +++ b/play_rusage.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +# Contributed by Stein Magnus Jodal + +from __future__ import print_function + +import resource +import time + +import alsaaudio + +seconds = 0 +max_rss = 0 +device = alsaaudio.PCM() + +while True: + device.write(b'\x00' * 44100) + time.sleep(1) + seconds += 1 + if seconds % 10 == 0: + prev_rss = max_rss + max_rss = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss + diff_rss = max_rss - prev_rss + print('After %ds: max RSS %d kB, increased %d kB' % ( + seconds, max_rss, diff_rss))