jcs
/subtext
/amendments
/269
folder: Only yield every other SHA1 chunk read
Our reads are relatively small, so this will speed up calculation
        without affecting other users/threads too heavily.
        Also move around some lines of code that made more sense while
        debugging the ZModem issue.
    jcs made amendment 269 over 2 years ago
--- folder.c	Sun Oct  2 17:08:49 2022
+++ folder.c	Sun Nov  6 21:13:05 2022
@@ -446,14 +446,14 @@ folder_upload(struct session *s, struct folder *folder
 		goto file_upload_cancel;
 	}
 	
+	strlcpy(file.filename, zs->file_name, sizeof(file.filename));
+	file.size = sb.st_size;
+
 	session_printf(s, "Successfully received file {{B}}%s{{/B}} of size "
 	  "{{B}}%ld{{/B}} byte%s.\r\n",
-	  zs->file_name, zs->file_size, zs->file_size == 1 ? "" : "s");
+	  file.filename, file.size, file.size == 1 ? "" : "s");
 	session_pause_return(s, '\r', "to continue...");
 	
-	strlcpy(file.filename, zs->file_name, sizeof(file.filename));
-	file.size = sb.st_size;
-
 	session_logf(s, "[%s] Received uploaded file %s of size %ld",
 	  folder->name, file.filename, file.size);
 
@@ -463,19 +463,20 @@ folder_upload(struct session *s, struct folder *folder
 
 	session_printf(s, "Calculating SHA1 checksum of uploaded file...");
 	session_flush(s);
-	SHA1Init(&sha1);
 	data = xmalloc(1024, "folder_upload data");
+	SHA1Init(&sha1);
 	fp = fopen(upload_path, "rb");
-	while (fp && !feof(fp)) {
+	for (n = 1; fp && !feof(fp); n++) {
 		size = fread(data, 1024, 1, fp);
 		SHA1Update(&sha1, (const u_int8_t *)data, size);
-		uthread_yield();
+		if (n % 2 == 0)
+			uthread_yield();
 	}
+	SHA1End(&sha1, (char *)&file.sha1_checksum);
 	if (fp)
 		fclose(fp);
 	xfree(&data);
 	
-	SHA1End(&sha1, (char *)&file.sha1_checksum);
 	session_printf(s, "done.\r\n\r\n");
 	session_flush(s);
 	session_printf(s, "{{B}}Uploaded By:{{/B}}       %s\r\n",