diff --git a/src/syncterm/ssh.c b/src/syncterm/ssh.c
index 85ca873d55eaecca59d9db6dac5bca0004b86fd1..3adb7c02ec542c4e8b4362b50bf457a438545667 100644
--- a/src/syncterm/ssh.c
+++ b/src/syncterm/ssh.c
@@ -457,11 +457,13 @@ key_not_present(sftp_filehandle_t f, const char *priv)
 				bufsz += 4096;
 			}
 			if (!sftpc_read(sftp_state, f, off, (bufsz - bufpos > 1024) ? 1024 : bufsz - bufpos, &r)) {
+				free(buf);
+				pthread_mutex_lock(&ssh_mutex);
 				if (sftp_state->err_code == SSH_FX_EOF) {
-					free(buf);
+					pthread_mutex_unlock(&ssh_mutex);
 					return true;
 				}
-				free(buf);
+				pthread_mutex_unlock(&ssh_mutex);
 				return false;
 			}
 			memcpy(&buf[bufpos], r->c_str, r->len);