mirror of
https://github.com/cookiengineer/audacity
synced 2025-04-30 15:49:41 +02:00
98 lines
3.4 KiB
Diff
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;
|