FirebirdSQL / python3-driver

Firebird driver for Python that uses new Firebird API
https://www.firebirdsql.org/en/devel-python-driver/
MIT License
27 stars 10 forks source link

Add low-level access to fb_shutdown and fb_shutdown_callback API func… #9

Closed artyom-smirnov closed 2 years ago

artyom-smirnov commented 2 years ago

…tions

libfbclient handle signals on its own, so driver will get shutdown error on SIGTERM/SIGINT/SIGBREAK and there is no other possibilities to prevent it and softly stop process except handling shutdown manually:

Example of fb_shutdown_callback usage:

@FB_SHUTDOWN_CALLBACK def driver_shutdown_callback(reason, mask, arg): return 1 if reason == fb_shutrsn_signal else 0

def api_loaded_hook(api): status = ISC_STATUS_ARRAY(20) api.fb_shutdown_callback(status, driver_shutdown_callback, fb_shut_confirmation, None) if db_api_error(status): raise exception_from_status(InternalError, status, "Error while adding shutdown callback")

add_hook(APIHook.LOADED, FirebirdAPI, api_loaded_hook)

Example of fb_shutdown usage:

get_api().fb_shutdown(0, fb_shutrsn_exit_called)

pcisar commented 2 years ago

Have no objection to add fb_shutdown_callback and related defs, but AFAIK fb_shutdown is replaced by iProvider.shutdown(), so it's available via api.master.get_dispatcher().shutdown()