Ignore:
Timestamp:
Jan 9, 2017, 11:09:38 AM (3 years ago)
Author:
jrpelegrina
Message:

Update new version: 3.15.02

File:
1 edited

Legend:

Unmodified
Added
Removed
  • filezilla/trunk/fuentes/src/engine/logging.cpp

    r130 r3185  
    2222
    2323int CLogging::m_refcount = 0;
    24 mutex CLogging::mutex_(false);
    25 
    26 thread_local int CLogging::debug_level_{0};
    27 thread_local int CLogging::raw_listing_{0};
     24fz::mutex CLogging::mutex_(false);
     25
     26thread_local int CLogging::debug_level_{};
     27thread_local int CLogging::raw_listing_{};
    2828
    2929CLogging::CLogging(CFileZillaEnginePrivate & engine)
    3030        : engine_(engine)
    3131{
    32         scoped_lock l(mutex_);
     32        fz::scoped_lock l(mutex_);
    3333        m_refcount++;
    3434}
     
    3636CLogging::~CLogging()
    3737{
    38         scoped_lock l(mutex_);
     38        fz::scoped_lock l(mutex_);
    3939        m_refcount--;
    4040
     
    8484}
    8585
    86 void CLogging::InitLogFile() const
     86bool CLogging::InitLogFile(fz::scoped_lock& l) const
    8787{
    8888        if (m_logfile_initialized)
    89                 return;
     89                return true;
    9090
    9191        m_logfile_initialized = true;
     
    9393        m_file = engine_.GetOptions().GetOption(OPTION_LOGGING_FILE);
    9494        if (m_file.empty())
    95                 return;
    96 
    97 #ifdef __WXMSW__
    98         m_log_fd = CreateFile(m_file, FILE_APPEND_DATA, FILE_SHARE_DELETE | FILE_SHARE_WRITE | FILE_SHARE_READ, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
     95                return false;
     96
     97#ifdef __WXMSW__
     98        m_log_fd = CreateFile(m_file.wc_str(), FILE_APPEND_DATA, FILE_SHARE_DELETE | FILE_SHARE_WRITE | FILE_SHARE_READ, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    9999        if (m_log_fd == INVALID_HANDLE_VALUE)
    100100#else
     
    103103#endif
    104104        {
     105                l.unlock(); //Avoid recursion
    105106                LogMessage(MessageType::Error, _("Could not open log file: %s"), wxSysErrorMsg());
    106                 return;
     107                return false;
    107108        }
    108109
     
    125126                m_max_size = 2000;
    126127        m_max_size *= 1024 * 1024;
     128
     129        return true;
    127130}
    128131
    129132void CLogging::LogToFile(MessageType nMessageType, const wxString& msg) const
    130133{
    131         scoped_lock l(mutex_);
    132 
    133         InitLogFile();
     134        fz::scoped_lock l(mutex_);
     135
     136        if (!m_logfile_initialized) {
     137                if (!InitLogFile(l)) {
     138                        return;
     139                }
     140        }
    134141#ifdef __WXMSW__
    135142        if (m_log_fd == INVALID_HANDLE_VALUE)
     
    140147#endif
    141148
    142         CDateTime now = CDateTime::Now();
     149        fz::datetime now = fz::datetime::now();
    143150        wxString out(wxString::Format(_T("%s %u %d %s %s")
    144151#ifdef __WXMSW__
     
    147154                _T("\n"),
    148155#endif
    149                 now.Format(_T("%Y-%m-%d %H:%M:%S"), CDateTime::local), m_pid, engine_.GetEngineId(), m_prefixes[static_cast<int>(nMessageType)], msg));
     156                now.format(_T("%Y-%m-%d %H:%M:%S"), fz::datetime::local), m_pid, engine_.GetEngineId(), m_prefixes[static_cast<int>(nMessageType)], msg));
    150157
    151158        const wxWX2MBbuf utf8 = out.mb_str(wxConvUTF8);
     
    163170                                if (!hMutex) {
    164171                                        wxString error = wxSysErrorMsg();
     172                                        l.unlock();
    165173                                        LogMessage(MessageType::Error, _("Could not create logging mutex: %s"), error);
    166174                                        return;
    167175                                }
    168176
    169                                 HANDLE hFile = CreateFile(m_file, FILE_APPEND_DATA, FILE_SHARE_DELETE | FILE_SHARE_WRITE | FILE_SHARE_READ, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
     177                                HANDLE hFile = CreateFile(m_file.wc_str(), FILE_APPEND_DATA, FILE_SHARE_DELETE | FILE_SHARE_WRITE | FILE_SHARE_READ, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    170178                                if (hFile == INVALID_HANDLE_VALUE) {
    171179                                        wxString error = wxSysErrorMsg();
     
    175183                                        CloseHandle(hMutex);
    176184
     185                                        l.unlock(); // Avoid recursion
    177186                                        LogMessage(MessageType::Error, _("Could not open log file: %s"), error);
    178187                                        return;
     
    188197                                        // (Why is everthing so needlessly complex on MSW?)
    189198                                        wxString tmp = wxFileName::CreateTempFileName(_T("fz3"));
    190                                         MoveFileEx(m_file + _T(".1"), tmp, MOVEFILE_REPLACE_EXISTING);
    191                                         DeleteFile(tmp);
    192                                         MoveFileEx(m_file, m_file + _T(".1"), MOVEFILE_REPLACE_EXISTING);
    193                                         m_log_fd = CreateFile(m_file, FILE_APPEND_DATA, FILE_SHARE_DELETE | FILE_SHARE_WRITE | FILE_SHARE_READ, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
     199                                        MoveFileEx((m_file + _T(".1")).wc_str(), tmp.wc_str(), MOVEFILE_REPLACE_EXISTING);
     200                                        DeleteFile(tmp.wc_str());
     201                                        MoveFileEx(m_file.wc_str(), (m_file + _T(".1")).wc_str(), MOVEFILE_REPLACE_EXISTING);
     202                                        m_log_fd = CreateFile(m_file.wc_str(), FILE_APPEND_DATA, FILE_SHARE_DELETE | FILE_SHARE_WRITE | FILE_SHARE_READ, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    194203                                        if (m_log_fd == INVALID_HANDLE_VALUE) {
    195204                                                // If this function would return bool, I'd return FILE_NOT_FOUND here.
     
    205214                                }
    206215
    207                                 if (!error.empty())
     216                                if (!error.empty()) {
     217                                        l.unlock(); // Avoid recursion
    208218                                        LogMessage(MessageType::Error, _("Could not open log file: %s"), error);
     219                                        return;
     220                                }
    209221                        }
    210222                }
     
    213225                BOOL res = WriteFile(m_log_fd, (const char*)utf8, len, &written, 0);
    214226                if (!res || written != len) {
    215                         LogMessage(MessageType::Error, _("Could not write to log file: %s"), wxSysErrorMsg());
    216227                        CloseHandle(m_log_fd);
    217228                        m_log_fd = INVALID_HANDLE_VALUE;
     229                        l.unlock(); // Avoid recursion
     230                        LogMessage(MessageType::Error, _("Could not write to log file: %s"), wxSysErrorMsg());
    218231                }
    219232#else
     
    222235                        int rc = fstat(m_log_fd, &buf);
    223236                        while (!rc && buf.st_size > m_max_size) {
    224                                 struct flock lock = {0};
     237                                struct flock lock = {};
    225238                                lock.l_type = F_WRLCK;
    226239                                lock.l_whence = SEEK_SET;
     
    241254                                        m_log_fd = -1;
    242255
     256                                        l.unlock(); // Avoid recursion
    243257                                        LogMessage(MessageType::Error, error);
    244258                                        return;
     
    265279                                m_log_fd = open(m_file.fn_str(), O_WRONLY | O_APPEND | O_CREAT | O_CLOEXEC, 0644);
    266280                                if (m_log_fd == -1) {
     281                                        l.unlock(); // Avoid recursion
    267282                                        LogMessage(MessageType::Error, wxSysErrorMsg());
    268283                                        return;
     
    278293                        close(m_log_fd);
    279294                        m_log_fd = -1;
     295
     296                        l.unlock(); // Avoid recursion
    280297                        LogMessage(MessageType::Error, _("Could not write to log file: %s"), wxSysErrorMsg());
    281298                }
Note: See TracChangeset for help on using the changeset viewer.