The following snipped is from ags_audio.c namely in ags_audio_real_set_pads() and isn't fully populated. May be a macro will be used to do so.
if(alloc_recycling){ channel->first_recycling = channel->last_recycling = ags_recycling_new(audio->devout); if(link_recycling){ recycling->next = channel->first_recycling; recycling->next->prev = recycling; recycling = recycling->next; } channel->first_recycling->channel = (GObject *) channel; // ags_garbage_collector_add(AGS_DEVOUT(audio->devout)->garbage_collector, channel->first_recycling); }else if(set_sync_link){ channel->first_recycling = input->first_recycling; channel->last_recycling = input->last_recycling; input = input->next; }else if(set_async_link){ channel->first_recycling = input->first_recycling; channel->last_recycling = input_pad_last->last_recycling; input = input->next; input_pad_last = input_pad_last->next; }
Has now become:
if(alloc_recycling){ channel->first_recycling = channel->last_recycling = ags_recycling_new(audio->devout); if(link_recycling){ recycling = recycling_iter->data; recycling_iter = recycling_iter->next; recycling->next = channel->first_recycling; recycling->next->prev = recycling; recycling_current = g_list_append(recycling_current, channel->first_recycling); } channel->first_recycling->channel = (GObject *) channel; // ags_garbage_collector_add(AGS_DEVOUT(audio->devout)->garbage_collector, channel->first_recycling); }else if(set_sync_link){ channel->first_recycling = input->first_recycling; channel->last_recycling = input->last_recycling; input = input->next; }else if(set_async_link){ channel->first_recycling = input->first_recycling; channel->last_recycling = input_pad_last->last_recycling; input = input->next; input_pad_last = input_pad_last->next; }