mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-22 20:03:02 +01:00
Fixed CORE-6009: I/O error during "open" operation for file "/tmp/firebird/fb_trace_*" in firebird.log
This commit is contained in:
parent
971b9a8506
commit
cf7a1b605d
@ -796,6 +796,7 @@ AC_CHECK_HEADERS(langinfo.h)
|
|||||||
AC_CHECK_HEADERS(iconv.h)
|
AC_CHECK_HEADERS(iconv.h)
|
||||||
AC_CHECK_HEADERS(libio.h)
|
AC_CHECK_HEADERS(libio.h)
|
||||||
AC_CHECK_HEADERS(linux/falloc.h)
|
AC_CHECK_HEADERS(linux/falloc.h)
|
||||||
|
AC_CHECK_HEADERS(utime.h)
|
||||||
|
|
||||||
AC_CHECK_HEADERS(socket.h sys/socket.h sys/sockio.h winsock2.h)
|
AC_CHECK_HEADERS(socket.h sys/socket.h sys/sockio.h winsock2.h)
|
||||||
AC_CHECK_DECLS(SOCK_CLOEXEC,,,[[
|
AC_CHECK_DECLS(SOCK_CLOEXEC,,,[[
|
||||||
|
@ -78,6 +78,10 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HAVE_UTIME_H
|
||||||
|
#include <utime.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
using namespace Firebird;
|
using namespace Firebird;
|
||||||
|
|
||||||
namespace os_utils
|
namespace os_utils
|
||||||
@ -248,6 +252,7 @@ bool touchFile(const char* pathname)
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
#else
|
#else
|
||||||
|
errno = ENOSYS;
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
#include "../../common/classes/TempFile.h"
|
#include "../../common/classes/TempFile.h"
|
||||||
#include "../../common/StatusArg.h"
|
#include "../../common/StatusArg.h"
|
||||||
|
#include "../../common/ScanDir.h"
|
||||||
#include "../../common/utils_proto.h"
|
#include "../../common/utils_proto.h"
|
||||||
#include "../../jrd/err_proto.h"
|
#include "../../jrd/err_proto.h"
|
||||||
#include "../../common/isc_proto.h"
|
#include "../../common/isc_proto.h"
|
||||||
@ -58,7 +59,7 @@ using namespace Firebird;
|
|||||||
|
|
||||||
namespace Jrd {
|
namespace Jrd {
|
||||||
|
|
||||||
static const FB_UINT64 TOUCH_INTERVAL = 60 * 60; // in seconds, one hour should be enough
|
static const FB_UINT64 TOUCH_INTERVAL = 60 * 60; // in seconds, one hour should be enough
|
||||||
|
|
||||||
void checkFileError(const char* filename, const char* operation, ISC_STATUS iscError)
|
void checkFileError(const char* filename, const char* operation, ISC_STATUS iscError)
|
||||||
{
|
{
|
||||||
@ -596,15 +597,41 @@ bool ConfigStorage::getItemLength(ITEM& tag, ULONG& len)
|
|||||||
|
|
||||||
void ConfigStorage::TouchFile::handler()
|
void ConfigStorage::TouchFile::handler()
|
||||||
{
|
{
|
||||||
os_utils::touchFile(fileName);
|
try
|
||||||
FbLocalStatus s;
|
{
|
||||||
TimerInterfacePtr()->start(&s, this, TOUCH_INTERVAL * 1000 * 1000);
|
ScanDir dir(dirName.c_str(), "*");
|
||||||
// ignore error in handler
|
while (dir.next())
|
||||||
|
{
|
||||||
|
PathName cur(dir.getFilePath());
|
||||||
|
if (cur == "." || cur == "..")
|
||||||
|
continue;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!os_utils::touchFile(cur.c_str()))
|
||||||
|
system_call_failed::raise("utime");
|
||||||
|
}
|
||||||
|
catch (const Exception& e)
|
||||||
|
{
|
||||||
|
iscLogException("touchFile", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FbLocalStatus s;
|
||||||
|
TimerInterfacePtr()->start(&s, this, TOUCH_INTERVAL * 1000 * 1000);
|
||||||
|
s.check();
|
||||||
|
}
|
||||||
|
catch (const Exception& e)
|
||||||
|
{
|
||||||
|
iscLogException("Start TouchFile timer failed", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigStorage::TouchFile::start(const char* fName)
|
void ConfigStorage::TouchFile::start(const char* fName)
|
||||||
{
|
{
|
||||||
fileName = fName;
|
PathName dummy;
|
||||||
|
PathUtils::splitLastComponent(dirName, dummy, fName);
|
||||||
|
|
||||||
FbLocalStatus s;
|
FbLocalStatus s;
|
||||||
TimerInterfacePtr()->start(&s, this, TOUCH_INTERVAL * 1000 * 1000);
|
TimerInterfacePtr()->start(&s, this, TOUCH_INTERVAL * 1000 * 1000);
|
||||||
check(&s);
|
check(&s);
|
||||||
|
@ -78,12 +78,16 @@ private:
|
|||||||
public Firebird::RefCntIface<Firebird::ITimerImpl<TouchFile, Firebird::CheckStatusWrapper> >
|
public Firebird::RefCntIface<Firebird::ITimerImpl<TouchFile, Firebird::CheckStatusWrapper> >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
TouchFile()
|
||||||
|
: dirName(getPool())
|
||||||
|
{ }
|
||||||
void handler();
|
void handler();
|
||||||
void start(const char* fName);
|
void start(const char* fName);
|
||||||
void stop();
|
void stop();
|
||||||
int release();
|
int release();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const char* fileName;
|
Firebird::PathName dirName;
|
||||||
};
|
};
|
||||||
Firebird::RefPtr<TouchFile> m_timer;
|
Firebird::RefPtr<TouchFile> m_timer;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user