closing logs and working file before relaunching Telegram

This commit is contained in:
John Preston 2016-02-08 13:50:56 +03:00
parent 520d82b0ff
commit b3da86bf08
5 changed files with 28 additions and 2 deletions

View File

@ -98,6 +98,14 @@ public:
return reopen(LogDataMain, 0, qsl("start")); return reopen(LogDataMain, 0, qsl("start"));
} }
void closeMain() {
QMutexLocker lock(_logsMutex(LogDataMain));
if (files[LogDataMain]) {
streams[LogDataMain].setDevice(0);
files[LogDataMain]->close();
}
}
bool instanceChecked() { bool instanceChecked() {
return reopen(LogDataMain, 0, QString()); return reopen(LogDataMain, 0, QString());
} }
@ -433,6 +441,13 @@ namespace Logs {
LogsBeforeSingleInstanceChecked.clear(); LogsBeforeSingleInstanceChecked.clear();
} }
void closeMain() {
LOG(("Explicitly closing main log and finishing crash handlers."));
if (LogsData) {
LogsData->closeMain();
}
}
void writeMain(const QString &v) { void writeMain(const QString &v) {
time_t t = time(NULL); time_t t = time(NULL);
struct tm tm; struct tm tm;
@ -490,7 +505,7 @@ namespace Logs {
return LogsBeforeSingleInstanceChecked; return LogsBeforeSingleInstanceChecked;
} }
int32 size = 0; int32 size = LogsBeforeSingleInstanceChecked.size();
for (LogsInMemoryList::const_iterator i = LogsInMemory->cbegin(), e = LogsInMemory->cend(); i != e; ++i) { for (LogsInMemoryList::const_iterator i = LogsInMemory->cbegin(), e = LogsInMemory->cend(); i != e; ++i) {
if (i->first == LogDataMain) { if (i->first == LogDataMain) {
size += i->second.size(); size += i->second.size();
@ -498,6 +513,9 @@ namespace Logs {
} }
QString result; QString result;
result.reserve(size); result.reserve(size);
if (!LogsBeforeSingleInstanceChecked.isEmpty()) {
result.append(LogsBeforeSingleInstanceChecked);
}
for (LogsInMemoryList::const_iterator i = LogsInMemory->cbegin(), e = LogsInMemory->cend(); i != e; ++i) { for (LogsInMemoryList::const_iterator i = LogsInMemory->cbegin(), e = LogsInMemory->cend(); i != e; ++i) {
if (i->first == LogDataMain) { if (i->first == LogDataMain) {
result += i->second; result += i->second;

View File

@ -32,6 +32,8 @@ namespace Logs {
bool instanceChecked(); bool instanceChecked();
void multipleInstances(); void multipleInstances();
void closeMain();
void writeMain(const QString &v); void writeMain(const QString &v);
void writeDebug(const char *file, int32 line, const QString &v); void writeDebug(const char *file, int32 line, const QString &v);

View File

@ -1411,6 +1411,8 @@ bool _execUpdater(bool update = true, const QString &crashreport = QString()) {
} }
} }
Logs::closeMain();
SignalHandlers::finish();
pid_t pid = fork(); pid_t pid = fork();
switch (pid) { switch (pid) {
case -1: return false; case -1: return false;

View File

@ -978,8 +978,10 @@ BOOL _execUpdater(BOOL update = YES, const QString &crashreport = QString()) {
} }
DEBUG_LOG(("Application Info: executing %1 %2").arg(objcString(path)).arg(objcString([args componentsJoinedByString:@" "]))); DEBUG_LOG(("Application Info: executing %1 %2").arg(objcString(path)).arg(objcString([args componentsJoinedByString:@" "])));
Logs::closeMain();
SignalHandlers::finish();
if (![NSTask launchedTaskWithLaunchPath:path arguments:args]) { if (![NSTask launchedTaskWithLaunchPath:path arguments:args]) {
LOG(("Task not launched while executing %1 %2").arg(objcString(path)).arg(objcString([args componentsJoinedByString:@" "]))); DEBUG_LOG(("Task not launched while executing %1 %2").arg(objcString(path)).arg(objcString([args componentsJoinedByString:@" "])));
return NO; return NO;
} }
} }

View File

@ -2284,6 +2284,8 @@ void psExecTelegram(const QString &crashreport) {
QString telegram(QDir::toNativeSeparators(cExeDir() + cExeName())), wdir(QDir::toNativeSeparators(cWorkingDir())); QString telegram(QDir::toNativeSeparators(cExeDir() + cExeName())), wdir(QDir::toNativeSeparators(cWorkingDir()));
DEBUG_LOG(("Application Info: executing %1 %2").arg(cExeDir() + cExeName()).arg(targs)); DEBUG_LOG(("Application Info: executing %1 %2").arg(cExeDir() + cExeName()).arg(targs));
Logs::closeMain();
SignalHandlers::finish();
HINSTANCE r = ShellExecute(0, 0, telegram.toStdWString().c_str(), targs.toStdWString().c_str(), wdir.isEmpty() ? 0 : wdir.toStdWString().c_str(), SW_SHOWNORMAL); HINSTANCE r = ShellExecute(0, 0, telegram.toStdWString().c_str(), targs.toStdWString().c_str(), wdir.isEmpty() ? 0 : wdir.toStdWString().c_str(), SW_SHOWNORMAL);
if (long(r) < 32) { if (long(r) < 32) {
DEBUG_LOG(("Application Error: failed to execute %1, working directory: '%2', result: %3").arg(telegram).arg(wdir).arg(long(r))); DEBUG_LOG(("Application Error: failed to execute %1, working directory: '%2', result: %3").arg(telegram).arg(wdir).arg(long(r)));