# HG changeset patch # User s_nakamoto # Date 1278605696 0 # Node ID 642cec0d33f5a894749556c71fd8af395fac9e4c # Parent 026b492731f9a1d74a3f59f43781a597b2dd0f82 Laszlo's fix to make generate threads idle priority on Linux, replaced some wxBase dependencies: wxMutex, wxFileExists, wxStandardPaths, wxGetLocalTimeMillis diff --git a/headers.h b/headers.h --- a/headers.h +++ b/headers.h @@ -59,6 +59,10 @@ #include #include #include +#include +#include +#include +#include #ifdef __WXMSW__ #include diff --git a/init.cpp b/init.cpp --- a/init.cpp +++ b/init.cpp @@ -4,6 +4,8 @@ #include "headers.h" +extern string GetDefaultDataDir(); /// todo: delete this later, just used by debug test + @@ -59,40 +61,6 @@ // #ifdef __WXMSW__ -typedef WINSHELLAPI BOOL (WINAPI *PSHGETSPECIALFOLDERPATHA)(HWND hwndOwner, LPSTR lpszPath, int nFolder, BOOL fCreate); - -string MyGetSpecialFolderPath(int nFolder, bool fCreate) -{ - char pszPath[MAX_PATH+100] = ""; - - // SHGetSpecialFolderPath is not usually available on NT 4.0 - HMODULE hShell32 = LoadLibraryA("shell32.dll"); - if (hShell32) - { - PSHGETSPECIALFOLDERPATHA pSHGetSpecialFolderPath = - (PSHGETSPECIALFOLDERPATHA)GetProcAddress(hShell32, "SHGetSpecialFolderPathA"); - if (pSHGetSpecialFolderPath) - (*pSHGetSpecialFolderPath)(NULL, pszPath, nFolder, fCreate); - FreeModule(hShell32); - } - - // Backup option - if (pszPath[0] == '\0') - { - if (nFolder == CSIDL_STARTUP) - { - strcpy(pszPath, getenv("USERPROFILE")); - strcat(pszPath, "\\Start Menu\\Programs\\Startup"); - } - else if (nFolder == CSIDL_APPDATA) - { - strcpy(pszPath, getenv("APPDATA")); - } - } - - return pszPath; -} - string StartupShortcutPath() { return MyGetSpecialFolderPath(CSIDL_STARTUP, true) + "\\Bitcoin.lnk"; @@ -100,7 +68,7 @@ bool GetStartOnSystemStartup() { - return wxFileExists(StartupShortcutPath()); + return filesystem::exists(StartupShortcutPath().c_str()); } void SetStartOnSystemStartup(bool fAutoStart) @@ -166,7 +134,7 @@ // // Define a new application -class CMyApp: public wxApp +class CMyApp : public wxApp { public: wxLocale m_locale; @@ -216,7 +184,10 @@ #ifdef __WXMSW__ if (str.size() >= 1 && str[0] == '/') str[0] = '-'; - str = str.MakeLower(); + char pszLower[MAX_PATH]; + strlcpy(pszLower, str.c_str(), sizeof(pszLower)); + strlwr(pszLower); + str = pszLower; #endif // haven't decided which argument to use for this yet if (str == "-daemon" || str == "-d" || str == "start") @@ -356,18 +327,14 @@ " -daemon \t " + _("Run in the background as a daemon and accept commands\n") + " -? \t " + _("This help message\n"); - - if (fWindows && fGUI) - { - // Tabs make the columns line up in the message box - wxMessageBox(strUsage, "Bitcoin", wxOK); - } - else - { - // Remove tabs - strUsage.Replace("\t", ""); - fprintf(stderr, "%s", ((string)strUsage).c_str()); - } +#if defined(__WXMSW__) && wxUSE_GUI + // Tabs make the columns line up in the message box + wxMessageBox(strUsage, "Bitcoin", wxOK); +#else + // Remove tabs + strUsage.Replace("\t", ""); + fprintf(stderr, "%s", ((string)strUsage).c_str()); +#endif return false; } @@ -387,6 +354,15 @@ printf("System default language is %d %s\n", m_locale.GetSystemLanguage(), ((string)m_locale.GetSysName()).c_str()); printf("Language file %s (%s)\n", (string("locale/") + (string)m_locale.GetCanonicalName() + "/LC_MESSAGES/bitcoin.mo").c_str(), ((string)m_locale.GetLocale()).c_str()); + /// debug - for now, just watching if these match + if (pszSetDataDir[0] == 0) + { + if (GetDefaultDataDir() != GetDataDir()) + printf("**** GetDefaultDataDir() %s != %s\n", GetDefaultDataDir().c_str(), GetDataDir().c_str()); + else + printf("OK GetDefaultDataDir() %s == %s\n", GetDefaultDataDir().c_str(), GetDataDir().c_str()); + } + if (mapArgs.count("-loadblockindextest")) { CTxDB txdb("r"); diff --git a/locale/de/LC_MESSAGES/bitcoin.mo b/locale/de/LC_MESSAGES/bitcoin.mo index e6c860eec597e780de408131cc2daa60aa144217..d53b22f7b132668a15441870a5b84999063ad360 GIT binary patch literal 16092 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 ae)^&##RnB%xXTYkO!qBC=MVi~RsI*w^@s5Q diff --git a/locale/it/LC_MESSAGES/bitcoin.po b/locale/it/LC_MESSAGES/bitcoin.po --- a/locale/it/LC_MESSAGES/bitcoin.po +++ b/locale/it/LC_MESSAGES/bitcoin.po @@ -690,6 +690,8 @@ msgid "" "Copyright (c) 2009-2010 Satoshi Nakamoto.\n" "\n" +"This is experimental software.\n" +"\n" "Distributed under the MIT/X11 software license, see the accompanying file \n" "license.txt or http://www.opensource.org/licenses/mit-license.php.\n" "\n" @@ -699,6 +701,8 @@ msgstr "" "Copyright (c) 2009-2010 Satoshi Nakamoto.\n" "\n" +"Questo รจ un software sperimentale.\n" +"\n" "Distribuito sotto la licenza software MIT/X11, guarda il file license.txt\n" "incluso oppure su http://www.opensource.org/licenses/mit-license.php.\n" "\n" diff --git a/locale/nl/LC_MESSAGES/bitcoin.mo b/locale/nl/LC_MESSAGES/bitcoin.mo index 79f5c83ac2f5ca56387b0c497ae9656cb83ef69c..380eafe929d9182657d220a3d9d4c580a5a28e6c GIT binary patch literal 14923 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 4000) + nHashCounter++; + if (GetTimeMillis() - nTimerStart > 4000) { - double dHashesPerSec = 1000.0 * nHashCounter / (GetTimeMillis() - nLastTick); - nLastTick = GetTimeMillis(); - nHashCounter = 0; - string strStatus = strprintf(" %.0f khash/s", dHashesPerSec/1000.0); - UIThreadCall(bind(CalledSetStatusBar, strStatus, 0)); - static int64 nLogTime; - if (GetTime() - nLogTime > 30 * 60) + static CCriticalSection cs; + CRITICAL_BLOCK(cs) { - nLogTime = GetTime(); - printf("%s ", DateTimeStrFormat("%x %H:%M", GetTime()).c_str()); - printf("hashmeter %3d CPUs %6.0f khash/s\n", vnThreadsRunning[3], dHashesPerSec/1000.0); + if (GetTimeMillis() - nTimerStart > 4000) + { + double dHashesPerSec = 1000.0 * (nMask+1) * nHashCounter / (GetTimeMillis() - nTimerStart); + nTimerStart = GetTimeMillis(); + nHashCounter = 0; + string strStatus = strprintf(" %.0f khash/s", dHashesPerSec/1000.0); + UIThreadCall(bind(CalledSetStatusBar, strStatus, 0)); + static int64 nLogTime; + if (GetTime() - nLogTime > 30 * 60) + { + nLogTime = GetTime(); + printf("%s ", DateTimeStrFormat("%x %H:%M", GetTime()).c_str()); + printf("hashmeter %3d CPUs %6.0f khash/s\n", vnThreadsRunning[3], dHashesPerSec/1000.0); + } + } } } diff --git a/makefile.unix b/makefile.unix --- a/makefile.unix +++ b/makefile.unix @@ -68,6 +68,6 @@ clean: - -rm obj/*.o - -rm obj/nogui/*.o - -rm headers.h.gch + -rm -f obj/*.o + -rm -f obj/nogui/*.o + -rm -f headers.h.gch diff --git a/rpc.cpp b/rpc.cpp --- a/rpc.cpp +++ b/rpc.cpp @@ -927,20 +927,22 @@ string strResult = (result.type() == str_type ? result.get_str() : write_string(result, true)); if (result.type() != null_type) { - if (fWindows && fGUI) - // Windows GUI apps can't print to command line, - // so settle for a message box yuck - MyMessageBox(strResult.c_str(), "Bitcoin", wxOK); - else - fprintf(stdout, "%s\n", strResult.c_str()); +#if defined(__WXMSW__) && wxUSE_GUI + // Windows GUI apps can't print to command line, + // so settle for a message box yuck + MyMessageBox(strResult.c_str(), "Bitcoin", wxOK); +#else + fprintf(stdout, "%s\n", strResult.c_str()); +#endif } return 0; } catch (std::exception& e) { - if (fWindows && fGUI) - MyMessageBox(strprintf("error: %s\n", e.what()).c_str(), "Bitcoin", wxOK); - else - fprintf(stderr, "error: %s\n", e.what()); +#if defined(__WXMSW__) && wxUSE_GUI + MyMessageBox(strprintf("error: %s\n", e.what()).c_str(), "Bitcoin", wxOK); +#else + fprintf(stderr, "error: %s\n", e.what()); +#endif } catch (...) { PrintException(NULL, "CommandLineRPC()"); } diff --git a/serialize.h b/serialize.h --- a/serialize.h +++ b/serialize.h @@ -20,7 +20,7 @@ class CAutoFile; static const int VERSION = 300; -static const char* pszSubVer = ""; +static const char* pszSubVer = ".1"; diff --git a/uibase.cpp b/uibase.cpp --- a/uibase.cpp +++ b/uibase.cpp @@ -554,7 +554,7 @@ bSizer631->Add( 0, 4, 0, wxEXPAND, 5 ); - m_staticTextMain = new wxStaticText( this, wxID_ANY, _("Copyright (c) 2009-2010 Satoshi Nakamoto.\n\nDistributed under the MIT/X11 software license, see the accompanying file \nlicense.txt or http://www.opensource.org/licenses/mit-license.php.\n\nThis product includes software developed by the OpenSSL Project for use in the \nOpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \nEric Young (eay@cryptsoft.com)."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextMain = new wxStaticText( this, wxID_ANY, _("Copyright (c) 2009-2010 Satoshi Nakamoto.\n\nThis is experimental software.\n\nDistributed under the MIT/X11 software license, see the accompanying file \nlicense.txt or http://www.opensource.org/licenses/mit-license.php.\n\nThis product includes software developed by the OpenSSL Project for use in the \nOpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \nEric Young (eay@cryptsoft.com)."), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextMain->Wrap( -1 ); bSizer631->Add( m_staticTextMain, 0, wxALL, 5 ); diff --git a/uibase.h b/uibase.h --- a/uibase.h +++ b/uibase.h @@ -227,7 +227,7 @@ public: wxStaticText* m_staticTextVersion; - CAboutDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About Bitcoin"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 532,315 ), long style = wxDEFAULT_DIALOG_STYLE ); + CAboutDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About Bitcoin"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 532,329 ), long style = wxDEFAULT_DIALOG_STYLE ); ~CAboutDialogBase(); }; diff --git a/uiproject.fbp b/uiproject.fbp --- a/uiproject.fbp +++ b/uiproject.fbp @@ -2866,7 +2866,7 @@ CAboutDialogBase - 532,315 + 532,329 wxDEFAULT_DIALOG_STYLE About Bitcoin @@ -3130,7 +3130,7 @@ 0 wxID_ANY - Copyright (c) 2009-2010 Satoshi Nakamoto. Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com). + Copyright (c) 2009-2010 Satoshi Nakamoto. This is experimental software. Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com). m_staticTextMain diff --git a/util.cpp b/util.cpp --- a/util.cpp +++ b/util.cpp @@ -20,13 +20,13 @@ // Init openssl library multithreading support -static wxMutex** ppmutexOpenSSL; +static boost::interprocess::interprocess_mutex** ppmutexOpenSSL; void locking_callback(int mode, int i, const char* file, int line) { if (mode & CRYPTO_LOCK) - ppmutexOpenSSL[i]->Lock(); + ppmutexOpenSSL[i]->lock(); else - ppmutexOpenSSL[i]->Unlock(); + ppmutexOpenSSL[i]->unlock(); } // Init @@ -36,9 +36,9 @@ CInit() { // Init openssl library multithreading support - ppmutexOpenSSL = (wxMutex**)OPENSSL_malloc(CRYPTO_num_locks() * sizeof(wxMutex*)); + ppmutexOpenSSL = (boost::interprocess::interprocess_mutex**)OPENSSL_malloc(CRYPTO_num_locks() * sizeof(boost::interprocess::interprocess_mutex*)); for (int i = 0; i < CRYPTO_num_locks(); i++) - ppmutexOpenSSL[i] = new wxMutex(); + ppmutexOpenSSL[i] = new boost::interprocess::interprocess_mutex(); CRYPTO_set_locking_callback(locking_callback); #ifdef __WXMSW__ @@ -152,7 +152,7 @@ if (fileout) { //// Debug print useful for profiling - //fprintf(fileout, " %"PRI64d" ", wxGetLocalTimeMillis().GetValue()); + //fprintf(fileout, " %"PRI64d" ", GetTimeMillis()); va_list arg_ptr; va_start(arg_ptr, pszFormat); ret = vfprintf(fileout, pszFormat, arg_ptr); @@ -521,6 +521,69 @@ +#ifdef __WXMSW__ +typedef WINSHELLAPI BOOL (WINAPI *PSHGETSPECIALFOLDERPATHA)(HWND hwndOwner, LPSTR lpszPath, int nFolder, BOOL fCreate); + +string MyGetSpecialFolderPath(int nFolder, bool fCreate) +{ + char pszPath[MAX_PATH+100] = ""; + + // SHGetSpecialFolderPath isn't always available on old Windows versions + HMODULE hShell32 = LoadLibraryA("shell32.dll"); + if (hShell32) + { + PSHGETSPECIALFOLDERPATHA pSHGetSpecialFolderPath = + (PSHGETSPECIALFOLDERPATHA)GetProcAddress(hShell32, "SHGetSpecialFolderPathA"); + if (pSHGetSpecialFolderPath) + (*pSHGetSpecialFolderPath)(NULL, pszPath, nFolder, fCreate); + FreeModule(hShell32); + } + + // Backup option + if (pszPath[0] == '\0') + { + if (nFolder == CSIDL_STARTUP) + { + strcpy(pszPath, getenv("USERPROFILE")); + strcat(pszPath, "\\Start Menu\\Programs\\Startup"); + } + else if (nFolder == CSIDL_APPDATA) + { + strcpy(pszPath, getenv("APPDATA")); + } + } + + return pszPath; +} +#endif + +string GetDefaultDataDir() +{ + // Windows: C:\Documents and Settings\username\Application Data\Appname + // Mac: ~/Library/Application Support/Appname + // Unix: ~/.appname +#ifdef __WXMSW__ + // Windows + return MyGetSpecialFolderPath(CSIDL_APPDATA, true) + "\\Bitcoin"; +#else + char* pszHome = getenv("HOME"); + if (pszHome == NULL || strlen(pszHome) == 0) + pszHome = (char*)"/"; + string strHome = pszHome; + if (strHome[strHome.size()-1] != '/') + strHome += '/'; +#ifdef __WXOSX__ + // Mac + strHome += "Library/Application Support/"; + _mkdir(strHome.c_str()); + return strHome + "Bitcoin"; +#else + // Unix + return strHome + ".bitcoin"; +#endif +#endif +} + void GetDataDir(char* pszDir) { // pszDir must be at least MAX_PATH length. @@ -538,11 +601,6 @@ { // This can be called during exceptions by printf, so we cache the // value so we don't have to do memory allocations after that. - // wxStandardPaths::GetUserDataDir - // Return the directory for the user-dependent application data files: - // Unix: ~/.appname - // Windows: C:\Documents and Settings\username\Application Data\appname - // Mac: ~/Library/Application Support/appname static char pszCachedDir[MAX_PATH]; if (pszCachedDir[0] == 0) { diff --git a/util.h b/util.h --- a/util.h +++ b/util.h @@ -141,6 +141,9 @@ const char* wxGetTranslation(const char* psz); int GetFilesize(FILE* file); void GetDataDir(char* pszDirRet); +#ifdef __WXMSW__ +string MyGetSpecialFolderPath(int nFolder, bool fCreate); +#endif string GetDataDir(); void ShrinkDebugFile(); uint64 GetRand(uint64 nMax); @@ -174,13 +177,13 @@ bool TryEnter() { return TryEnterCriticalSection(&cs); } #else protected: - wxMutex mutex; + boost::interprocess::interprocess_recursive_mutex mutex; public: - explicit CCriticalSection() : mutex(wxMUTEX_RECURSIVE) { } + explicit CCriticalSection() { } ~CCriticalSection() { } - void Enter() { mutex.Lock(); } - void Leave() { mutex.Unlock(); } - bool TryEnter() { return mutex.TryLock() == wxMUTEX_NO_ERROR; } + void Enter() { mutex.lock(); } + void Leave() { mutex.unlock(); } + bool TryEnter() { return mutex.try_lock(); } #endif public: const char* pszFile; @@ -324,7 +327,8 @@ inline int64 GetTimeMillis() { - return wxGetLocalTimeMillis().GetValue(); + return (posix_time::ptime(posix_time::microsec_clock::universal_time()) - + posix_time::ptime(gregorian::date(1970,1,1))).total_milliseconds(); } inline string DateTimeStrFormat(const char* pszFormat, int64 nTime) @@ -513,7 +517,7 @@ return hthread; } -#define THREAD_PRIORITY_LOWEST PRIO_MIN +#define THREAD_PRIORITY_LOWEST PRIO_MAX #define THREAD_PRIORITY_BELOW_NORMAL 2 #define THREAD_PRIORITY_NORMAL 0 #define THREAD_PRIORITY_ABOVE_NORMAL 0