File tree Expand file tree Collapse file tree 2 files changed +36
-3
lines changed Expand file tree Collapse file tree 2 files changed +36
-3
lines changed Original file line number Diff line number Diff line change @@ -100,8 +100,7 @@ class ChannelHolder {
100
100
virtual ~Placeholder () {}
101
101
virtual const std::type_index Type () const = 0;
102
102
virtual void * Ptr () const = 0;
103
- virtual void Close () const = 0;
104
- std::type_info type_;
103
+ virtual void Close () = 0;
105
104
};
106
105
107
106
template <typename T>
@@ -116,7 +115,7 @@ class ChannelHolder {
116
115
if (channel_) channel_->Close ();
117
116
}
118
117
119
- std::unique_ptr<Channel<T>* > channel_;
118
+ std::unique_ptr<Channel<T>> channel_;
120
119
const std::type_index type_;
121
120
};
122
121
Original file line number Diff line number Diff line change @@ -20,6 +20,7 @@ limitations under the License. */
20
20
#include " gtest/gtest.h"
21
21
22
22
using paddle::framework::Channel;
23
+ using paddle::framework::ChannelHolder;
23
24
using paddle::framework::MakeChannel;
24
25
using paddle::framework::CloseChannel;
25
26
using paddle::framework::details::Buffered;
@@ -508,3 +509,36 @@ TEST(Channel, UnbufferedChannelDestroyUnblocksSendersTest) {
508
509
auto ch = MakeChannel<int >(0 );
509
510
ChannelDestroyUnblockSenders (ch);
510
511
}
512
+
513
+ void ChannelHolderSendReceive (ChannelHolder *ch) {
514
+ unsigned sum_send = 0 ;
515
+ std::thread t ([&]() {
516
+ for (int i = 0 ; i < 5 ; i++) {
517
+ EXPECT_EQ (ch->Send (&i), true );
518
+ sum_send += i;
519
+ }
520
+ });
521
+ for (int i = 0 ; i < 5 ; i++) {
522
+ int recv;
523
+ EXPECT_EQ (ch->Receive (&recv), true );
524
+ EXPECT_EQ (recv, i);
525
+ }
526
+
527
+ ch->close ();
528
+ t.join ();
529
+ EXPECT_EQ (sum_send, 10U );
530
+ }
531
+
532
+ TEST (ChannelHolder, ChannelHolderBufferedSendReceiveTest) {
533
+ ChannelHolder *ch = new ChannelHolder ();
534
+ ch->Reset <int >(10 );
535
+ ChannelHolderSendReceive (ch);
536
+ delete ch;
537
+ }
538
+
539
+ TEST (ChannelHolder, ChannelHolderUnBufferedSendReceiveTest) {
540
+ ChannelHolder *ch = new ChannelHolder ();
541
+ ch->Reset <int >(0 );
542
+ ChannelHolderSendReceive (ch);
543
+ delete ch;
544
+ }
You can’t perform that action at this time.
0 commit comments