I use Synapse for threaded serial communication on Linux and Windows without problems.
lNet and Synapse are great components. I think it's hard to choose one. The main difference I can see is:
lNet: higher level, event driven.
Synapse: lower level (you can deal with the nuts and bolts).
I don't know if someone have done serious tests to compare those components.
Thanks, do you mean Synaser?
I am getting the following errors when I try to install my threaded Indy app with heaptrace on. I'm using indy 10.2.0.3, FPC 2.2.4, Lazarus 0.9.28.2, Lazdaemon.
Any thoughts?

Heap dump by heaptrc unit
343 memory blocks allocated : 19803/20888
340 memory blocks freed : 19735/20808
3 unfreed memory blocks : 68
True heap size : 262144 (160 used in System startup)
True free heap : 261712
Should be : 261736
Call trace for block $0006D950 size 28
$00408512
$004673AD TIDTHREADSAFE__CREATE, line 217 of d:/
oy/SMSDispatcher/LANProwler/indy-10.2.0.3/fpc/IdThreadSafe.pas
$0045B22F IDTHREAD_init, line 601 of d:/loy/SMSD
spatcher/LANProwler/indy-10.2.0.3/fpc/IdThread.pas
$00409FE4
$0040DF70
$00409FE4
$0040DF70
Call trace for block $0007ECF8 size 12
$00408512
$0045B22F IDTHREAD_init, line 601 of d:/loy/SMSD
spatcher/LANProwler/indy-10.2.0.3/fpc/IdThread.pas
$00409FE4
$0040DF70
Call trace for block $0006D9B0 size 28
$00408512
$00441E6C IDSTACK_init, line 870 of d:/loy/SMSDi
patcher/LANProwler/indy-10.2.0.3/fpc/IdStack.pas
$00409FE4
$0040DF70
$004353D8 LCLPROC_init, line 4466 of lclproc.pas
$00409FE4
$0040DF70