#include "mainwindow.h" #include #include "browserpluginpath.h" #include "filelogger.h" #include "safeapplication.h" #include #include #include #include #include #include "mongodatabaseconnector.h" class MyOpenSslLocks { public: inline MyOpenSslLocks() : initLocker(QMutex::Recursive), locksLocker(QMutex::Recursive) { QMutexLocker locker(&locksLocker); int numLocks = CRYPTO_num_locks(); locks = new QMutex *[numLocks]; memset(locks, 0, numLocks * sizeof(QMutex *)); } inline ~MyOpenSslLocks() { QMutexLocker locker(&locksLocker); int len = CRYPTO_num_locks(); for (int i = 0; i < len; ++i) { delete locks[i]; } delete [] locks; } inline QMutex *lock(int num) { QMutexLocker locker(&locksLocker); QMutex *tmp = locks[num]; if (!tmp) tmp = locks[num] = new QMutex(QMutex::Recursive); return tmp; } QMutex *globalLock() { return &locksLocker; } QMutex *initLock() { return &initLocker; } private: QMutex initLocker; QMutex locksLocker; QMutex **locks; }; Q_GLOBAL_STATIC(MyOpenSslLocks, my_openssl_locks) extern "C" { static void my_locking_function(int mode, int lockNumber, const char * a, int b) { QMutex *mutex = my_openssl_locks()->lock(lockNumber); // Lock or unlock it if (mode & CRYPTO_LOCK) mutex->lock(); else mutex->unlock(); } static unsigned long my_id_function() { return (quintptr)QThread::currentThreadId(); } } // extern "C" void myMessageHandler(QtMsgType type, const QMessageLogContext &, const QString & str) { QString txt; QString datestring = QTime::currentTime().toString("hh:mm:ss"); switch (type) { case QtDebugMsg: txt = QString("Debug %1: %2").arg(datestring).arg(str); break; case QtWarningMsg: txt = QString("Warning %1: %2").arg(datestring).arg(str); break; case QtCriticalMsg: txt = QString("Critical %1: %2").arg(datestring).arg(str); break; case QtFatalMsg: txt = QString("Fatal %1: %2").arg(datestring).arg(str); abort(); } QFile outFile("debug.txt"); outFile.open(QIODevice::WriteOnly | QIODevice::Append); QTextStream ts(&outFile); ts << txt << endl; outFile.close(); } using namespace BrowserAutomationStudioFramework; int main(int argc, char *argv[]) { qInstallMessageHandler(myMessageHandler); qDebug()<<"Start 001"; qDebug()<<"InitCurl"<SetIsSilent(); qDebug()<<"Start 100"; w->Start(); qDebug()<<"Start 200"; int res = a.exec(); qDebug()<<"Start 300"; curl_global_cleanup(); qDebug()<<"Start 301"; qDebug()<<"SSL custom lock"<