I'll bet you dollars to doughnuts that won't help. All tcdrain() does is block the calling process until the tx buffer and tx fifo are empty. It has no effect whatsoever on the transmission of the bytes. It just lets you know whent they're gone (however some drivers are broken and return before the last few bytes have been sent).