Browse Source

GnuTLS: Fixed misleading timeout error in log on early stop

Paul-Louis Ageneau 3 years ago
parent
commit
cae7f8d9f9
3 changed files with 10 additions and 9 deletions
  1. 2 2
      src/impl/dtlstransport.cpp
  2. 6 5
      src/impl/queue.hpp
  3. 2 2
      src/impl/tlstransport.cpp

+ 2 - 2
src/impl/dtlstransport.cpp

@@ -320,9 +320,9 @@ ssize_t DtlsTransport::ReadCallback(gnutls_transport_ptr_t ptr, void *data, size
 int DtlsTransport::TimeoutCallback(gnutls_transport_ptr_t ptr, unsigned int ms) {
 	DtlsTransport *t = static_cast<DtlsTransport *>(ptr);
 	try {
-		bool notEmpty = t->mIncomingQueue.wait(
+		bool isReadable = t->mIncomingQueue.wait(
 		    ms != GNUTLS_INDEFINITE_TIMEOUT ? std::make_optional(milliseconds(ms)) : nullopt);
-		return notEmpty ? 1 : 0;
+		return isReadable ? 1 : 0;
 
 	} catch (const std::exception &e) {
 		PLOG_WARNING << e.what();

+ 6 - 5
src/impl/queue.hpp

@@ -138,12 +138,13 @@ template <typename T> optional<T> Queue<T>::exchange(T element) {
 
 template <typename T> bool Queue<T>::wait(const optional<std::chrono::milliseconds> &duration) {
 	std::unique_lock lock(mMutex);
-	if (duration)
-		mPopCondition.wait_for(lock, *duration, [this]() { return !mQueue.empty() || mStopping; });
-	else
+	if (duration) {
+		return mPopCondition.wait_for(lock, *duration,
+		                              [this]() { return !mQueue.empty() || mStopping; });
+	} else {
 		mPopCondition.wait(lock, [this]() { return !mQueue.empty() || mStopping; });
-
-	return !mQueue.empty();
+		return true;
+	}
 }
 
 template <typename T> void Queue<T>::pushImpl(T element) {

+ 2 - 2
src/impl/tlstransport.cpp

@@ -267,9 +267,9 @@ ssize_t TlsTransport::ReadCallback(gnutls_transport_ptr_t ptr, void *data, size_
 int TlsTransport::TimeoutCallback(gnutls_transport_ptr_t ptr, unsigned int ms) {
 	TlsTransport *t = static_cast<TlsTransport *>(ptr);
 	try {
-		bool notEmpty = t->mIncomingQueue.wait(
+		bool isReadable = t->mIncomingQueue.wait(
 		    ms != GNUTLS_INDEFINITE_TIMEOUT ? std::make_optional(milliseconds(ms)) : nullopt);
-		return notEmpty ? 1 : 0;
+		return isReadable ? 1 : 0;
 
 	} catch (const std::exception &e) {
 		PLOG_WARNING << e.what();