MCPcopy Create free account
hub / github.com/Pagghiu/SaneCppLibraries / unpipe

Method unpipe

Libraries/AsyncStreams/AsyncStreams.cpp:1092–1180  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1090}
1091
1092bool AsyncPipeline::unpipe()
1093{
1094 bool res = true;
1095 releasePendingWrites();
1096 shouldEndWhenDrained = false;
1097 endingPipes = false;
1098
1099 // Deregister all source events
1100 if (source)
1101 {
1102 int validTransforms = 0;
1103 for (size_t idx = 0; idx < MaxTransforms; ++idx)
1104 {
1105 if (transforms[idx] != nullptr)
1106 validTransforms++;
1107 }
1108 if (validTransforms == 0)
1109 {
1110 res = source->eventData.removeAllListenersBoundTo(*this);
1111 SC_TRY(res);
1112 res = source->eventEnd.removeAllListenersBoundTo(*this);
1113 SC_TRY(res);
1114 res = source->eventClose.removeAllListenersBoundTo(*this);
1115 SC_TRY(res);
1116 }
1117 else
1118 {
1119 AsyncWritableStream& writable = *transforms[0];
1120
1121 res = listenToEventData(*source, *transforms[0], false);
1122 SC_TRY(res);
1123 res = source->eventClose.removeAllListenersBoundTo(writable);
1124 SC_TRY(res);
1125 }
1126 res = source->eventError.removeAllListenersBoundTo(*this);
1127 SC_TRY(res);
1128 source = nullptr;
1129 }
1130 dispatchReadable = nullptr;
1131
1132 // Deregister all transforms events
1133 for (size_t idx = 0; idx < MaxTransforms; ++idx)
1134 {
1135 AsyncDuplexStream* transform = transforms[idx];
1136 if (transform == nullptr)
1137 break;
1138 if ((idx + 1 == MaxTransforms) or transforms[idx + 1] == nullptr)
1139 {
1140 res = transform->eventData.removeAllListenersBoundTo(*this);
1141 SC_TRY(res);
1142 res = transform->AsyncReadableStream::eventEnd.removeAllListenersBoundTo(*this);
1143 SC_TRY(res);
1144 res = transform->AsyncReadableStream::eventClose.removeAllListenersBoundTo(*this);
1145 SC_TRY(res);
1146 break;
1147 }
1148 else
1149 {

Callers 4

waitForStopToFinishMethod · 0.80
closeConnectionMethod · 0.80
resetMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected