What happens when you assign input to output in a general_work call, out[ii]=in[ii], but don't call produce? Is the stuff you dumped into 'out' lost when general_work returns WORK_CALLED_PRODUCE?
My minds eye sees the out variable as a secondary local buffer for general_work. You dump stuff in there while general_work has scope, and transfer the contents of this buffer to the gnuradio block buffer when you call produce. Am I understanding this correctly?