To help troubleshoot your sketch, check ring_buff Index each time you set or read ring_buff with assert.h.
Include assert.h at the beginning of your sketch, then before setting or reading ring_buff[Index], write:
assert(Index >= 0 && Index<BSIZE);
Your sketch will hang with the line number in your code if there is an issue with Index.
BTW, if(current_tap > BSIZE){ ....} is not correct, should be > (BSIZE - 1)