Some possible causes:
1) still issues with buffer allocation/deallocation on the C side of serial module
2) interference with the task (coroutines) scheduling, since I tried to disable GC and I still got the crashes
Crashes happen quite often but every time in random points of the code, while just after a write(), read() or readline() call.
It is like the Buffer object obtained by a serial port call vanishes later at some random point of time.
Look also at this example, in this pattern the read() ALWAYS crashes:
repeat
t = COM_PORT:read(1)
print('--- after read ---', t, t.status)
local buf = t:wait() --> ALWAYS CRASH HERE !!
until not buf