Skip to content

Possible exceptions in UCommon.pas initialization and deadlock in finalization #245

@SkybuckFlying

Description

@SkybuckFlying

Potentially unsafe code:

UCommon.pas:

initialization
MinTimeStampDateTime:= StrToDateTime('1980-01-01 00:00:000', IntlDateTimeFormat);

GMainThreadNotify := TThreadNotify.Create ( TThread.CurrentThread ); // unit initialization runs in main thread

Exception handling code is not yet in place. Both lines of code can be problematic.
If system format for time and date change this may cause a problem with parsing from string to date and time.

Also

finalization
FreeAndNil(GMainThreadNotify);

Could dead lock on waiting and throwing an exception, me wonders if exception handling is still in place for finalization sections:

"

This function can raise EXCEPTION_POSSIBLE_DEADLOCK if a wait operation on the critical section times out. The timeout interval is specified by the following registry value: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\CriticalSectionTimeout. Do not handle a possible deadlock exception; instead, debug the application.

If a critical section is deleted while it is still owned, the state of the threads waiting for ownership of the deleted critical section is undefined.

While a process is exiting, if a call to EnterCriticalSection would block, it will instead terminate the process immediately. This may cause global destructors to not be called.

"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions