TL;DR Use raise; instead of raise E; Long version In this code, when an exception caused by the ProduceMessage method got caught by the try ... except construct and reached the Break statement in the Exception handler, an EAccesViolation occured: [sourcecode lang="Delphi"] procedure TProducerLoop.Run; begin while True do begin Connect; while True do begin try … Continue reading How not to re-raise an exception in Delphi