rendered paste body? build? linuxdcppIndex: client/HashManager.cpp===================================================================RCS file: /cvsroot/linuxdcpp/linuxdcpp/client/HashManager.cpp,vretrieving revision 1.8diff -u -r1.8 HashManager.cpp--- client/HashManager.cpp 23 Jun 2006 19:51:48 -0000 1.8+++ client/HashManager.cpp 9 Sep 2006 22:58:50 -0000@@ -27,6 +27,10 @@ #include "ZUtils.h" #include "SFVReader.h" +#ifndef _WIN32+#include <sys/mman.h> // mmap, munmap, madvise+#endif+ #define HASH_FILE_VERSION_STRING "2" static const u_int32_t HASH_FILE_VERSION=2; const int64_t HashManager::MIN_BLOCK_SIZE = 64*1024;@@ -438,9 +442,9 @@ } } +#ifdef _WIN32 #define BUF_SIZE (256*1024) -#ifdef _WIN32 bool HashManager::Hasher::fastHash(const string& fname, u_int8_t* buf, TigerTree& tth, int64_t size, CRC32Filter* xcrc32) { HANDLE h = INVALID_HANDLE_VALUE; DWORD x, y;@@ -545,7 +549,59 @@ ::CloseHandle(h); return ok; }-#endif++#else // _WIN32++static const int64_t BUF_SIZE = 0x1000000 - (0x1000000 % getpagesize());++bool HashManager::Hasher::fastHash(const string& filename, u_int8_t* , TigerTree& tth, int64_t size, CRC32Filter* xcrc32) {+ int fd = open(filename.c_str(), O_RDONLY | O_LARGEFILE);+ if(fd == -1)+ return false;++ int64_t size_left = size;+ int64_t pos = 0;+ int64_t size_read = 0;+ void *buf = 0;++ u_int32_t lastRead = GET_TICK();+ while(pos < size) {+ size_read = std::min(size_left, BUF_SIZE);+ buf = mmap(0, size_read, PROT_READ, MAP_SHARED, fd, pos);+ if(buf == MAP_FAILED) {+ close(fd);+ return false;+ }++ madvise(buf, size_read, MADV_SEQUENTIAL | MADV_WILLNEED);++ if(SETTING(MAX_HASH_SPEED) > 0) {+ u_int32_t now = GET_TICK();+ u_int32_t minTime = size_read * 1000LL / (SETTING(MAX_HASH_SPEED) * 1024LL * 1024LL);+ if(lastRead + minTime > now) {+ u_int32_t diff = now - lastRead;+ Thread::sleep(minTime - diff);+ } + lastRead = lastRead + minTime;+ } else {+ lastRead = GET_TICK();+ }++ tth.update(buf, size_read);+ if(xcrc32)+ (*xcrc32)(buf, size_read);+ munmap(buf, size_read);+ {+ Lock l(cs);+ currentSize = max(currentSize - size_read, _LL(0));+ }+ pos += size_read;+ size_left -= size_read;+ }+ return true;+}++#endif // _WIN32 int HashManager::Hasher::run() { setThreadPriority(Thread::IDLE);@@ -607,13 +663,15 @@ xcrc32 = &crc32; size_t n = 0;-#ifdef _WIN32 TigerTree fastTTH(bs); tth = &fastTTH;+#ifdef _WIN32 if(!virtualBuf || !fastHash(fname, buf, fastTTH, size, xcrc32)) {+#else+ if(!BOOLSETTING(FAST_HASHING) || !fastHash(fname, 0, fastTTH, size, xcrc32)) {+#endif tth = &slowTTH; crc32 = CRC32Filter();-#endif u_int32_t lastRead = GET_TICK(); do {@@ -638,11 +696,9 @@ } sizeLeft -= n; } while (n > 0 && !stop);-#ifdef _WIN32 } else { sizeLeft = 0; }-#endif f.close(); tth->finalize(); u_int32_t end = GET_TICK();Index: client/HashManager.h===================================================================RCS file: /cvsroot/linuxdcpp/linuxdcpp/client/HashManager.h,vretrieving revision 1.5diff -u -r1.5 HashManager.h--- client/HashManager.h 15 Jun 2006 18:30:50 -0000 1.5+++ client/HashManager.h 9 Sep 2006 22:58:51 -0000@@ -139,9 +139,7 @@ } virtual int run();-#ifdef _WIN32 bool fastHash(const string& fname, u_int8_t* buf, TigerTree& tth, int64_t size, CRC32Filter* xcrc32);-#endif void getStats(string& curFile, int64_t& bytesLeft, size_t& filesLeft) { Lock l(cs); curFile = currentFile;Index: client/SettingsManager.cpp===================================================================RCS file: /cvsroot/linuxdcpp/linuxdcpp/client/SettingsManager.cpp,vretrieving revision 1.5diff -u -r1.5 SettingsManager.cpp--- client/SettingsManager.cpp 15 Jun 2006 18:30:50 -0000 1.5+++ client/SettingsManager.cpp 9 Sep 2006 22:58:51 -0000@@ -73,7 +73,7 @@ "NoIpOverride", "SearchOnlyFreeSlots", "LastSearchType", "BoldFinishedDownloads", "BoldFinishedUploads", "BoldQueue", "BoldHub", "BoldPm", "BoldSearch", "SocketInBuffer", "SocketOutBuffer", "OnlyDlTthFiles", "OpenWaitingUsers", "BoldWaitingUsers", "OpenSystemLog", "BoldSystemLog", "AutoRefreshTime",- "UseSsl", "AutoSearchLimit", "AltSortOrder", "AutoKickNoFavs", "PromptPassword",+ "UseSsl", "AutoSearchLimit", "AltSortOrder", "AutoKickNoFavs", "PromptPassword", "FastHashing", "SENTRY", // Int64 "TotalUpload", "TotalDownload",@@ -257,6 +257,7 @@ setDefault(ALT_SORT_ORDER, false); setDefault(AUTO_KICK_NO_FAVS, false); setDefault(PROMPT_PASSWORD, false);+ setDefault(FAST_HASHING, true); #ifdef _WIN32 setDefault(MAIN_WINDOW_STATE, SW_SHOWNORMAL);Index: client/SettingsManager.h===================================================================RCS file: /cvsroot/linuxdcpp/linuxdcpp/client/SettingsManager.h,vretrieving revision 1.5diff -u -r1.5 SettingsManager.h--- client/SettingsManager.h 15 Jun 2006 18:30:50 -0000 1.5+++ client/SettingsManager.h 9 Sep 2006 22:58:51 -0000@@ -89,7 +89,7 @@ NO_IP_OVERRIDE, SEARCH_ONLY_FREE_SLOTS, LAST_SEARCH_TYPE, BOLD_FINISHED_DOWNLOADS, BOLD_FINISHED_UPLOADS, BOLD_QUEUE, BOLD_HUB, BOLD_PM, BOLD_SEARCH, SOCKET_IN_BUFFER, SOCKET_OUT_BUFFER, ONLY_DL_TTH_FILES, OPEN_WAITING_USERS, BOLD_WAITING_USERS, OPEN_SYSTEM_LOG, BOLD_SYSTEM_LOG, AUTO_REFRESH_TIME, - USE_SSL, AUTO_SEARCH_LIMIT, ALT_SORT_ORDER, AUTO_KICK_NO_FAVS, PROMPT_PASSWORD,+ USE_SSL, AUTO_SEARCH_LIMIT, ALT_SORT_ORDER, AUTO_KICK_NO_FAVS, PROMPT_PASSWORD, FAST_HASHING, INT_LAST }; enum Int64Setting { INT64_FIRST = INT_LAST + 1,Index: glade/settingsdialog.glade===================================================================RCS file: /cvsroot/linuxdcpp/linuxdcpp/glade/settingsdialog.glade,vretrieving revision 1.17diff -u -r1.17 settingsdialog.glade--- glade/settingsdialog.glade 1 Sep 2006 15:05:56 -0000 1.17+++ glade/settingsdialog.glade 9 Sep 2006 22:58:51 -0000@@ -5052,6 +5052,31 @@ <property name="fill">False</property> </packing> </child>++ <child>+ <widget class="GtkLabel" id="label217">+ <property name="visible">True</property>+ <property name="label" translatable="yes"></property>+ <property name="use_underline">False</property>+ <property name="use_markup">False</property>+ <property name="justify">GTK_JUSTIFY_LEFT</property>+ <property name="wrap">False</property>+ <property name="selectable">False</property>+ <property name="xalign">0.5</property>+ <property name="yalign">0.5</property>+ <property name="xpad">0</property>+ <property name="ypad">0</property>+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>+ <property name="width_chars">-1</property>+ <property name="single_line_mode">False</property>+ <property name="angle">0</property>+ </widget>+ <packing>+ <property name="padding">0</property>+ <property name="expand">False</property>+ <property name="fill">False</property>+ </packing>+ </child> </widget> <packing> <property name="padding">0</property>@@ -5198,6 +5223,25 @@ <property name="fill">False</property> </packing> </child>++ <child>+ <widget class="GtkCheckButton" id="fastHashingCheckButton">+ <property name="visible">True</property>+ <property name="can_focus">True</property>+ <property name="label" translatable="yes">fast hashing</property>+ <property name="use_underline">True</property>+ <property name="relief">GTK_RELIEF_NORMAL</property>+ <property name="focus_on_click">True</property>+ <property name="active">True</property>+ <property name="inconsistent">False</property>+ <property name="draw_indicator">True</property>+ </widget>+ <packing>+ <property name="padding">0</property>+ <property name="expand">False</property>+ <property name="fill">False</property>+ </packing>+ </child> </widget> <packing> <property name="padding">0</property>@@ -5386,6 +5430,31 @@ <property name="fill">False</property> </packing> </child>++ <child>+ <widget class="GtkLabel" id="label218">+ <property name="visible">True</property>+ <property name="label" translatable="yes"></property>+ <property name="use_underline">False</property>+ <property name="use_markup">False</property>+ <property name="justify">GTK_JUSTIFY_LEFT</property>+ <property name="wrap">False</property>+ <property name="selectable">False</property>+ <property name="xalign">0.5</property>+ <property name="yalign">0.5</property>+ <property name="xpad">0</property>+ <property name="ypad">0</property>+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>+ <property name="width_chars">-1</property>+ <property name="single_line_mode">False</property>+ <property name="angle">0</property>+ </widget>+ <packing>+ <property name="padding">0</property>+ <property name="expand">False</property>+ <property name="fill">False</property>+ </packing>+ </child> </widget> <packing> <property name="padding">0</property>@@ -5574,6 +5643,31 @@ <property name="fill">False</property> </packing> </child>++ <child>+ <widget class="GtkLabel" id="label219">+ <property name="visible">True</property>+ <property name="label" translatable="yes"></property>+ <property name="use_underline">False</property>+ <property name="use_markup">False</property>+ <property name="justify">GTK_JUSTIFY_LEFT</property>+ <property name="wrap">False</property>+ <property name="selectable">False</property>+ <property name="xalign">0.5</property>+ <property name="yalign">0.5</property>+ <property name="xpad">0</property>+ <property name="ypad">0</property>+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>+ <property name="width_chars">-1</property>+ <property name="single_line_mode">False</property>+ <property name="angle">0</property>+ </widget>+ <packing>+ <property name="padding">0</property>+ <property name="expand">False</property>+ <property name="fill">False</property>+ </packing>+ </child> </widget> <packing> <property name="padding">0</property>@@ -5720,6 +5814,31 @@ <property name="fill">False</property> </packing> </child>++ <child>+ <widget class="GtkLabel" id="label220">+ <property name="visible">True</property>+ <property name="label" translatable="yes"></property>+ <property name="use_underline">False</property>+ <property name="use_markup">False</property>+ <property name="justify">GTK_JUSTIFY_LEFT</property>+ <property name="wrap">False</property>+ <property name="selectable">False</property>+ <property name="xalign">0.5</property>+ <property name="yalign">0.5</property>+ <property name="xpad">0</property>+ <property name="ypad">0</property>+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>+ <property name="width_chars">-1</property>+ <property name="single_line_mode">False</property>+ <property name="angle">0</property>+ </widget>+ <packing>+ <property name="padding">0</property>+ <property name="expand">False</property>+ <property name="fill">False</property>+ </packing>+ </child> </widget> <packing> <property name="padding">0</property>@@ -5908,6 +6027,31 @@ <property name="fill">False</property> </packing> </child>++ <child>+ <widget class="GtkLabel" id="label221">+ <property name="visible">True</property>+ <property name="label" translatable="yes"></property>+ <property name="use_underline">False</property>+ <property name="use_markup">False</property>+ <property name="justify">GTK_JUSTIFY_LEFT</property>+ <property name="wrap">False</property>+ <property name="selectable">False</property>+ <property name="xalign">0.5</property>+ <property name="yalign">0.5</property>+ <property name="xpad">0</property>+ <property name="ypad">0</property>+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>+ <property name="width_chars">-1</property>+ <property name="single_line_mode">False</property>+ <property name="angle">0</property>+ </widget>+ <packing>+ <property name="padding">0</property>+ <property name="expand">False</property>+ <property name="fill">False</property>+ </packing>+ </child> </widget> <packing> <property name="padding">0</property>Index: linux/settingsdialog.cc===================================================================RCS file: /cvsroot/linuxdcpp/linuxdcpp/linux/settingsdialog.cc,vretrieving revision 1.33diff -u -r1.33 settingsdialog.cc--- linux/settingsdialog.cc 1 Sep 2006 15:05:57 -0000 1.33+++ linux/settingsdialog.cc 9 Sep 2006 22:58:51 -0000@@ -274,6 +274,7 @@ sm->set(SettingsManager::SOCKET_IN_BUFFER, Util::toString(gtk_spin_button_get_value(GTK_SPIN_BUTTON(getWidget("socketReadSpinButton"))))); sm->set(SettingsManager::SOCKET_OUT_BUFFER, Util::toString(gtk_spin_button_get_value(GTK_SPIN_BUTTON(getWidget("socketWriteSpinButton"))))); WSET("default-charset", Text::acpToUtf8(string(gtk_entry_get_text(GTK_ENTRY(getWidget("encodingEntry"))))));+ sm->set(SettingsManager::FAST_HASHING, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(getWidget("fastHashingCheckButton")))); } sm->save();@@ -746,6 +747,7 @@ gtk_spin_button_set_value(GTK_SPIN_BUTTON(getWidget("socketReadSpinButton")), (double)SETTING(SOCKET_IN_BUFFER)); gtk_spin_button_set_value(GTK_SPIN_BUTTON(getWidget("socketWriteSpinButton")), (double)SETTING(SOCKET_OUT_BUFFER)); gtk_entry_set_text(GTK_ENTRY(getWidget("encodingEntry")), WGETS("default-charset").c_str());+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(getWidget("fastHashingCheckButton")), SETTING(FAST_HASHING)); } }