← Back to team overview

linuxdcpp-team team mailing list archive

[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);