Могу ошибаться, но по-моему, дело в том, что вы переопределяете labelChan. Сначала вы в labelsReceiver передаете переменную, которая была объявлена над main() (она передается по значению - то есть в labelsReceiver вы взаимодействуете с копией переменной labelChan), а затем вы из метода labelsEmitter возвращаете другой канал, в который вы пишете, но из которого не читаете. А при увеличении буфера до 10 ошибки нет потому, что чисел в input'е меньше 10-ти => они просто записываются в буфер, но их все еще никто не читает.