Update of /cvsroot/audacity/lib-src/libnyquist/nyquist/nyqsrc
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv17229/nyquist/nyqsrc
Modified Files:
sound.c
Log Message:
Fix stack overflow due to recursion.
Index: sound.c
===================================================================
RCS file: /cvsroot/audacity/lib-src/libnyquist/nyquist/nyqsrc/sound.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- sound.c 26 Feb 2009 03:11:28 -0000 1.2
+++ sound.c 1 Mar 2009 21:09:49 -0000 1.3
@@ -506,33 +506,39 @@
void snd_list_unref(snd_list_type list)
{
void (*freefunc)();
+ snd_list_type next;
- if (list == NULL || list == zero_snd_list) {
- if (list == NULL)
+ while (list != zero_snd_list) {
+ if (list == NULL) {
nyquist_printf("why did snd_list_unref get %p?\n", list);
- return;
- }
- list->refcnt--;
-/* nyquist_printf("snd_list_unref "); print_snd_list_type(list);
stdputstr("\n"); */
- if (list->refcnt == 0) {
- if (list->block && list->block != zero_block) {
- /* there is a next snd_list */
-/* stdputstr("["); */
- sample_block_unref(list->block);
-/* stdputstr("]"); */
- snd_list_unref(list->u.next);
+ return;
}
- else if (list->block == NULL) { /* the next thing is the susp */
- /* free suspension structure */
- /* nyquist_printf("freeing s...@%p\n", list->u.susp); */
- freefunc = list->u.susp->free;
- (*freefunc)(list->u.susp);
+ next = zero_snd_list;
+
+ list->refcnt--;
+/* nyquist_printf("snd_list_unref "); print_snd_list_type(list);
stdputstr("\n"); */
+ if (list->refcnt == 0) {
+ if (list->block && list->block != zero_block) {
+ /* there is a next snd_list */
+/* stdputstr("["); */
+ sample_block_unref(list->block);
+/* stdputstr("]"); */
+ next = list->u.next;
+ }
+ else if (list->block == NULL) { /* the next thing is the susp */
+ /* free suspension structure */
+ /* nyquist_printf("freeing s...@%p\n", list->u.susp); */
+ freefunc = list->u.susp->free;
+ (*freefunc)(list->u.susp);
+ }
+ /* nyquist_printf("freeing snd_l...@%p\n", list); */
+ //DBY
+ if (list == list_watch) printf("freeing watched snd_list %p\n",
list);
+ //DBY
+ ffree_snd_list(list, "snd_list_unref");
}
- /* nyquist_printf("freeing snd_l...@%p\n", list); */
- //DBY
- if (list == list_watch) printf("freeing watched snd_list %p\n", list);
- //DBY
- ffree_snd_list(list, "snd_list_unref");
+
+ list = next;
}
}
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Audacity-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/audacity-cvs