linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #00482
[Branch ~linuxdcpp-team/linuxdcpp/trunk] Rev 351: Remove unnecessary iteration in fast hash loop
------------------------------------------------------------
revno: 351
committer: Steven Sheehy <steven.sheehy@xxxxxxxxx>
branch nick: trunk
timestamp: Sat 2010-02-27 19:56:15 -0600
message:
Remove unnecessary iteration in fast hash loop
modified:
dcpp/HashManager.cpp
--
lp:linuxdcpp
https://code.launchpad.net/~linuxdcpp-team/linuxdcpp/trunk
Your team LinuxDC++ Team is subscribed to branch lp:linuxdcpp.
To unsubscribe from this branch go to https://code.launchpad.net/~linuxdcpp-team/linuxdcpp/trunk/+edit-subscription.
=== modified file 'dcpp/HashManager.cpp'
--- dcpp/HashManager.cpp 2010-01-07 19:49:29 +0000
+++ dcpp/HashManager.cpp 2010-02-28 01:56:15 +0000
@@ -615,7 +615,6 @@
if(fd == -1)
return false;
- int64_t size_left = size;
int64_t pos = 0;
int64_t size_read = 0;
void *buf = 0;
@@ -638,43 +637,39 @@
return false; // Better luck with the slow hash.
}
- uint32_t lastRead = GET_TICK();
- while(pos <= size) {
- if(size_left > 0) {
- 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;
- }
-
- if (sigsetjmp(sb_env, 1)) {
- if (buf != 0) {
- munmap(buf, size_read);
- }
- if (sigaction(SIGBUS, &oldact, NULL) == -1) {
- dcdebug("Failed to reset old signal handler for SIGBUS\n");
- }
-
- close(fd);
- return false;
- }
-
- madvise(buf, size_read, MADV_SEQUENTIAL | MADV_WILLNEED);
-
- if(SETTING(MAX_HASH_SPEED) > 0) {
- uint32_t now = GET_TICK();
- uint32_t minTime = size_read * 1000LL / (SETTING(MAX_HASH_SPEED) * 1024LL * 1024LL);
- if(lastRead + minTime> now) {
- uint32_t diff = now - lastRead;
- Thread::sleep(minTime - diff);
- }
- lastRead = lastRead + minTime;
- } else {
- lastRead = GET_TICK();
- }
+ uint64_t lastRead = GET_TICK();
+ while(pos < size) {
+ size_read = std::min(size - pos, BUF_SIZE);
+ buf = mmap(0, size_read, PROT_READ, MAP_SHARED, fd, pos);
+ if(buf == MAP_FAILED) {
+ close(fd);
+ return false;
+ }
+
+ if (sigsetjmp(sb_env, 1)) {
+ if (buf != 0) {
+ munmap(buf, size_read);
+ }
+ if (sigaction(SIGBUS, &oldact, NULL) == -1) {
+ dcdebug("Failed to reset old signal handler for SIGBUS\n");
+ }
+
+ close(fd);
+ return false;
+ }
+
+ madvise(buf, size_read, MADV_SEQUENTIAL | MADV_WILLNEED);
+
+ if(SETTING(MAX_HASH_SPEED) > 0) {
+ uint64_t now = GET_TICK();
+ uint64_t minTime = size_read * 1000LL / (SETTING(MAX_HASH_SPEED) * 1024LL * 1024LL);
+ if(lastRead + minTime> now) {
+ uint64_t diff = now - lastRead;
+ Thread::sleep(minTime - diff);
+ }
+ lastRead = lastRead + minTime;
} else {
- size_read = 0;
+ lastRead = GET_TICK();
}
tth.update(buf, size_read);
@@ -686,13 +681,8 @@
currentSize = max(static_cast<uint64_t>(currentSize - size_read), static_cast<uint64_t>(0));
}
- if(size_left <= 0) {
- break;
- }
-
munmap(buf, size_read);
pos += size_read;
- size_left -= size_read;
}
close(fd);