In general, rules for commit are the same no matter whether this commit from usual code or exception handler: if commit fails the entire transaction is retried just as it was not executed at all.
For exception handler this means the follwoing: if commit fails, transaction will be retried from the beginning pretending that it was not executed, so exception will be abandoned as it were not happened at all.
Exception will reach handler outside transaction if only commit in TMhandler at transaction boundary succeeds. Otherwise external handler would see inconsistent state: unchanged local data (reverted due to abort), but exception, potentially based on changed data, is caught.
Regards,
Serge Preis.