1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-04-30 15:49:41 +02:00
audacity/lib-src/libnyquist/nyquist.patch
2010-01-24 09:19:39 +00:00

98 lines
3.4 KiB
Diff

Index: nyquist/nyqsrc/sound.c
===================================================================
RCS file: /cvsroot/audacity/lib-src/libnyquist/nyquist/nyqsrc/sound.c,v
retrieving revision 1.4
diff -u -r1.4 sound.c
--- nyquist/nyqsrc/sound.c 5 Mar 2009 16:34:00 -0000 1.4
+++ nyquist/nyqsrc/sound.c 5 Mar 2009 16:55:56 -0000
@@ -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 susp@%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 susp@%p\n", list->u.susp); */
+ freefunc = list->u.susp->free;
+ (*freefunc)(list->u.susp);
+ }
+ /* nyquist_printf("freeing snd_list@%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_list@%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;
}
}
Index: nyquist/xlisp/xldmem.c
===================================================================
RCS file: /cvsroot/audacity/lib-src/libnyquist/nyquist/xlisp/xldmem.c,v
retrieving revision 1.3
diff -u -r1.3 xldmem.c
--- nyquist/xlisp/xldmem.c 5 Mar 2009 16:34:00 -0000 1.3
+++ nyquist/xlisp/xldmem.c 5 Mar 2009 16:56:12 -0000
@@ -299,8 +299,6 @@
LOCAL void findmem(void)
{
gc();
- if (nfree < (long)anodes)
- addseg();
}
/* gc - garbage collect (only called here and in xlimage.c) */
@@ -346,6 +344,10 @@
/* count the gc call */
++gccalls;
+ /* add a new segment if still no free nodes */
+ if (nfree < (long)anodes)
+ addseg();
+
/* call the *gc-hook* if necessary */
if (s_gchook && (fun = getvalue(s_gchook))) {
newfp = xlsp;