Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(410)

Unified Diff: remoting/jingle_glue/jingle_channel.h

Issue 3167047: Jingle_glue bugfixes. (Closed)
Patch Set: - Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/client/chromoting_client.cc ('k') | remoting/jingle_glue/jingle_channel.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/jingle_glue/jingle_channel.h
diff --git a/remoting/jingle_glue/jingle_channel.h b/remoting/jingle_glue/jingle_channel.h
index 0ba1a75393248fc09d1e29a47bc5dd5e3944b362..ee537603f0a3c0de001cd0adc82611547d2b4224 100644
--- a/remoting/jingle_glue/jingle_channel.h
+++ b/remoting/jingle_glue/jingle_channel.h
@@ -14,6 +14,7 @@
#include "base/lock.h"
#include "base/ref_counted.h"
#include "base/scoped_ptr.h"
+#include "base/task.h"
#include "third_party/libjingle/source/talk/base/sigslot.h"
namespace base {
@@ -59,8 +60,10 @@ class JingleChannel : public base::RefCountedThreadSafe<JingleChannel> {
// Puts data to the write buffer.
virtual void Write(scoped_refptr<media::DataBuffer> data);
- // Closes the tunnel.
+ // Closes the tunnel. If specified, |closed_task| is executed after the
+ // connection is successfully closed.
virtual void Close();
+ virtual void Close(Task* closed_task);
// Current state of the tunnel.
State state() const { return state_; }
@@ -87,17 +90,12 @@ class JingleChannel : public base::RefCountedThreadSafe<JingleChannel> {
// caller. Ownership of |thread| is not.
void Init(JingleThread* thread, talk_base::StreamInterface* stream,
const std::string& jid);
- void SetState(State state);
-
- JingleThread* thread_;
- scoped_ptr<talk_base::StreamInterface> stream_;
- State state_;
private:
+ friend class JingleChannelTest;
FRIEND_TEST_ALL_PREFIXES(JingleChannelTest, Init);
FRIEND_TEST_ALL_PREFIXES(JingleChannelTest, Write);
FRIEND_TEST_ALL_PREFIXES(JingleChannelTest, Read);
- FRIEND_TEST_ALL_PREFIXES(JingleChannelTest, Close);
typedef std::deque<scoped_refptr<media::DataBuffer> > DataQueue;
@@ -132,11 +130,31 @@ class JingleChannel : public base::RefCountedThreadSafe<JingleChannel> {
// Called from OnStreamEvent() in the jingle thread.
void DoRead();
- void DoClose(base::WaitableEvent* done_event);
+ // Used by Close() to actually close the channel.
+ void DoClose();
+
+ // Updates state and calels |callback_| if neccessary.
+ void SetState(State new_state);
+
+ // The thread this channel runs on.
+ JingleThread* thread_;
+
+ // The stream of this channel.
+ scoped_ptr<talk_base::StreamInterface> stream_;
+
+ // Current state of the channel.
+ State state_;
// Callback that is called on channel events. Initialized in the constructor.
+ // Must not be called if |closed_| is set to true.
Callback* callback_;
+ // |closed_| must be set to true after Close() is called. |state_lock_| must
+ // be locked whenever closed_ is accessed.
+ Lock state_lock_;
+ bool closed_;
+ scoped_ptr<Task> closed_task_;
+
// Event handler for stream events.
EventHandler event_handler_;
« no previous file with comments | « remoting/client/chromoting_client.cc ('k') | remoting/jingle_glue/jingle_channel.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698