2
0
Эх сурвалжийг харах

Catch exceptions in transport callbacks for safety

Paul-Louis Ageneau 5 жил өмнө
parent
commit
726b4c4c33
1 өөрчлөгдсөн 13 нэмэгдсэн , 3 устгасан
  1. 13 3
      src/transport.hpp

+ 13 - 3
src/transport.hpp

@@ -65,10 +65,20 @@ public:
 	virtual bool send(message_ptr message) { return outgoing(message); }
 
 protected:
-	void recv(message_ptr message) { mRecvCallback(message); }
+	void recv(message_ptr message) {
+		try {
+			mRecvCallback(message);
+		} catch (const std::exception &e) {
+			PLOG_WARNING << e.what();
+		}
+	}
 	void changeState(State state) {
-		if (mState.exchange(state) != state)
-			mStateChangeCallback(state);
+		try {
+			if (mState.exchange(state) != state)
+				mStateChangeCallback(state);
+		} catch (const std::exception &e) {
+			PLOG_WARNING << e.what();
+		}
 	}
 
 	virtual void incoming(message_ptr message) { recv(message); }