mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-24 15:23:03 +01:00
Fixed delivery of status vector from service thread
This commit is contained in:
parent
0ce66da575
commit
dceffbf006
@ -103,7 +103,10 @@ THREAD_ENTRY_DECLARE ALICE_main(THREAD_ENTRY_PARAM arg)
|
|||||||
}
|
}
|
||||||
catch (const Firebird::Exception& e)
|
catch (const Firebird::Exception& e)
|
||||||
{
|
{
|
||||||
e.stuff_exception(uSvc->getStatus());
|
ISC_STATUS_ARRAY status;
|
||||||
|
e.stuff_exception(status);
|
||||||
|
uSvc->initStatus();
|
||||||
|
uSvc->setServiceStatus(status);
|
||||||
exit_code = FB_FAILURE;
|
exit_code = FB_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -590,8 +593,9 @@ int alice(Firebird::UtilSvc* uSvc)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ((exit_code != FINI_OK) && uSvc->isService())
|
if ((exit_code != FINI_OK) && uSvc->isService())
|
||||||
{
|
{
|
||||||
memcpy(uSvc->getStatus(), tdgbl->status, sizeof (ISC_STATUS_ARRAY));
|
uSvc->initStatus();
|
||||||
|
uSvc->setServiceStatus(tdgbl->status);
|
||||||
}
|
}
|
||||||
|
|
||||||
return exit_code;
|
return exit_code;
|
||||||
|
@ -135,7 +135,10 @@ THREAD_ENTRY_DECLARE BURP_main(THREAD_ENTRY_PARAM arg)
|
|||||||
}
|
}
|
||||||
catch (const Firebird::Exception& e)
|
catch (const Firebird::Exception& e)
|
||||||
{
|
{
|
||||||
e.stuff_exception(uSvc->getStatus());
|
ISC_STATUS_ARRAY status;
|
||||||
|
e.stuff_exception(status);
|
||||||
|
uSvc->initStatus();
|
||||||
|
uSvc->setServiceStatus(status);
|
||||||
exit_code = FB_FAILURE;
|
exit_code = FB_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1151,8 +1154,9 @@ int gbak(Firebird::UtilSvc* uSvc)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ((exit_code != FINI_OK) && uSvc->isService())
|
if ((exit_code != FINI_OK) && uSvc->isService())
|
||||||
{
|
{
|
||||||
memcpy(uSvc->getStatus(), tdgbl->status, sizeof (ISC_STATUS_ARRAY));
|
uSvc->initStatus();
|
||||||
|
uSvc->setServiceStatus(tdgbl->status);
|
||||||
}
|
}
|
||||||
|
|
||||||
return exit_code;
|
return exit_code;
|
||||||
|
@ -110,9 +110,10 @@ public:
|
|||||||
virtual void putBytes(const UCHAR*, size_t) { }
|
virtual void putBytes(const UCHAR*, size_t) { }
|
||||||
virtual void setServiceStatus(const ISC_STATUS*) { }
|
virtual void setServiceStatus(const ISC_STATUS*) { }
|
||||||
virtual void setServiceStatus(const USHORT, const USHORT, const MsgFormat::SafeArg&) { }
|
virtual void setServiceStatus(const USHORT, const USHORT, const MsgFormat::SafeArg&) { }
|
||||||
virtual ISC_STATUS* getStatus() { return 0; }
|
virtual const ISC_STATUS* getStatus() { return 0; }
|
||||||
virtual void getAddressPath(ClumpletWriter&) { }
|
virtual void getAddressPath(ClumpletWriter&) { }
|
||||||
virtual bool finished() { return m_finished; };
|
virtual bool finished() { return m_finished; };
|
||||||
|
virtual void initStatus() { }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_finished;
|
bool m_finished;
|
||||||
|
@ -64,7 +64,8 @@ public:
|
|||||||
virtual void setServiceStatus(const ISC_STATUS*) = 0;
|
virtual void setServiceStatus(const ISC_STATUS*) = 0;
|
||||||
virtual void setServiceStatus(const USHORT, const USHORT, const MsgFormat::SafeArg&) = 0;
|
virtual void setServiceStatus(const USHORT, const USHORT, const MsgFormat::SafeArg&) = 0;
|
||||||
virtual void hidePasswd(ArgvType&, int) = 0;
|
virtual void hidePasswd(ArgvType&, int) = 0;
|
||||||
virtual ISC_STATUS* getStatus() = 0;
|
virtual const ISC_STATUS* getStatus() = 0;
|
||||||
|
virtual void initStatus() = 0;
|
||||||
virtual void checkService() = 0;
|
virtual void checkService() = 0;
|
||||||
virtual void getAddressPath(Firebird::ClumpletWriter& dpb) = 0;
|
virtual void getAddressPath(Firebird::ClumpletWriter& dpb) = 0;
|
||||||
virtual bool finished() = 0;
|
virtual bool finished() = 0;
|
||||||
|
@ -3174,7 +3174,7 @@ ISC_STATUS GDS_SERVICE_QUERY(ISC_STATUS* user_status,
|
|||||||
{
|
{
|
||||||
memcpy(user_status, service->getStatus(), sizeof(ISC_STATUS) * len);
|
memcpy(user_status, service->getStatus(), sizeof(ISC_STATUS) * len);
|
||||||
// Empty out the service status vector
|
// Empty out the service status vector
|
||||||
memset(service->getStatus(), 0, sizeof(ISC_STATUS_ARRAY));
|
service->initStatus();
|
||||||
return user_status[1];
|
return user_status[1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -605,11 +605,16 @@ void Service::hidePasswd(ArgvType&, int)
|
|||||||
// no action
|
// no action
|
||||||
}
|
}
|
||||||
|
|
||||||
ISC_STATUS* Service::getStatus()
|
const ISC_STATUS* Service::getStatus()
|
||||||
{
|
{
|
||||||
return svc_status;
|
return svc_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Service::initStatus()
|
||||||
|
{
|
||||||
|
fb_utils::init_status(svc_status);
|
||||||
|
}
|
||||||
|
|
||||||
void Service::checkService()
|
void Service::checkService()
|
||||||
{
|
{
|
||||||
// no action
|
// no action
|
||||||
@ -2213,7 +2218,7 @@ void Service::readFbLog()
|
|||||||
}
|
}
|
||||||
catch (const Firebird::Exception& e)
|
catch (const Firebird::Exception& e)
|
||||||
{
|
{
|
||||||
e.stuff_exception(getStatus());
|
e.stuff_exception(svc_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file)
|
if (file)
|
||||||
|
@ -118,7 +118,9 @@ public: // utilities interface with service
|
|||||||
// no-op for services
|
// no-op for services
|
||||||
virtual void hidePasswd(ArgvType&, int);
|
virtual void hidePasswd(ArgvType&, int);
|
||||||
// return service status
|
// return service status
|
||||||
virtual ISC_STATUS* getStatus();
|
virtual const ISC_STATUS* getStatus();
|
||||||
|
// reset service status
|
||||||
|
virtual void initStatus();
|
||||||
// no-op for services
|
// no-op for services
|
||||||
virtual void checkService();
|
virtual void checkService();
|
||||||
// add address path (taken from spb) to dpb if present
|
// add address path (taken from spb) to dpb if present
|
||||||
|
@ -342,7 +342,10 @@ THREAD_ENTRY_DECLARE TRACE_main(THREAD_ENTRY_PARAM arg)
|
|||||||
}
|
}
|
||||||
catch (const Exception& e)
|
catch (const Exception& e)
|
||||||
{
|
{
|
||||||
e.stuff_exception(svc->getStatus());
|
ISC_STATUS_ARRAY status;
|
||||||
|
e.stuff_exception(status);
|
||||||
|
svc->initStatus();
|
||||||
|
svc->setServiceStatus(status);
|
||||||
exit_code = FB_FAILURE;
|
exit_code = FB_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,7 +100,10 @@ THREAD_ENTRY_DECLARE GSEC_main(THREAD_ENTRY_PARAM arg)
|
|||||||
}
|
}
|
||||||
catch (const Firebird::Exception& e)
|
catch (const Firebird::Exception& e)
|
||||||
{
|
{
|
||||||
e.stuff_exception(uSvc->getStatus());
|
ISC_STATUS_ARRAY status;
|
||||||
|
e.stuff_exception(status);
|
||||||
|
uSvc->initStatus();
|
||||||
|
uSvc->setServiceStatus(status);
|
||||||
exit_code = FB_FAILURE;
|
exit_code = FB_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -381,11 +384,8 @@ int gsec(Firebird::UtilSvc* uSvc)
|
|||||||
tdsec->tsec_throw = false;
|
tdsec->tsec_throw = false;
|
||||||
|
|
||||||
GSEC_print_status(status);
|
GSEC_print_status(status);
|
||||||
if (uSvc->getStatus())
|
uSvc->initStatus();
|
||||||
{
|
uSvc->setServiceStatus(status);
|
||||||
fb_utils::init_status(uSvc->getStatus());
|
|
||||||
uSvc->setServiceStatus(status);
|
|
||||||
}
|
|
||||||
|
|
||||||
exit_code = FINI_ERROR;
|
exit_code = FINI_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -267,7 +267,10 @@ THREAD_ENTRY_DECLARE main_gstat(THREAD_ENTRY_PARAM arg)
|
|||||||
}
|
}
|
||||||
catch (const Firebird::Exception& e)
|
catch (const Firebird::Exception& e)
|
||||||
{
|
{
|
||||||
e.stuff_exception(uSvc->getStatus());
|
ISC_STATUS_ARRAY status;
|
||||||
|
e.stuff_exception(status);
|
||||||
|
uSvc->initStatus();
|
||||||
|
uSvc->setServiceStatus(status);
|
||||||
exit_code = FB_FAILURE;
|
exit_code = FB_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -921,8 +924,9 @@ int gstat(Firebird::UtilSvc* uSvc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((exit_code != FINI_OK) && uSvc->isService())
|
if ((exit_code != FINI_OK) && uSvc->isService())
|
||||||
{
|
{
|
||||||
memcpy(uSvc->getStatus(), tddba->dba_status, sizeof (ISC_STATUS_ARRAY));
|
uSvc->initStatus();
|
||||||
|
uSvc->setServiceStatus(tddba->dba_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
return exit_code;
|
return exit_code;
|
||||||
|
@ -1186,7 +1186,10 @@ THREAD_ENTRY_DECLARE NBACKUP_main(THREAD_ENTRY_PARAM arg)
|
|||||||
}
|
}
|
||||||
catch (const Exception& e)
|
catch (const Exception& e)
|
||||||
{
|
{
|
||||||
e.stuff_exception(uSvc->getStatus());
|
ISC_STATUS_ARRAY status;
|
||||||
|
e.stuff_exception(status);
|
||||||
|
uSvc->initStatus();
|
||||||
|
uSvc->setServiceStatus(status);
|
||||||
exit_code = FB_FAILURE;
|
exit_code = FB_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user