| 162 | //------------------------------------------------------------------------------------------------------- |
| 163 | |
| 164 | void SC::AsyncResult::reactivateRequest(bool shouldBeReactivated) |
| 165 | { |
| 166 | if (hasBeenReactivated) |
| 167 | *hasBeenReactivated = shouldBeReactivated; |
| 168 | if (shouldBeReactivated) |
| 169 | { |
| 170 | switch (async.state) |
| 171 | { |
| 172 | case AsyncRequest::State::Free: { |
| 173 | if (AsyncEventLoop::Internal::KernelEvents::needsSubmissionWhenReactivating(async)) |
| 174 | { |
| 175 | async.state = AsyncRequest::State::Reactivate; |
| 176 | eventLoop.internal.submissions.queueBack(async); |
| 177 | eventLoop.internal.numberOfSubmissions += 1; |
| 178 | } |
| 179 | else |
| 180 | { |
| 181 | async.state = AsyncRequest::State::Submitting; |
| 182 | eventLoop.internal.addActiveHandle(async); |
| 183 | } |
| 184 | } |
| 185 | break; |
| 186 | case AsyncRequest::State::Reactivate: { |
| 187 | // Nothing to do |
| 188 | } |
| 189 | break; |
| 190 | case AsyncRequest::State::Cancelling: |
| 191 | case AsyncRequest::State::Active: |
| 192 | case AsyncRequest::State::Setup: { |
| 193 | // Should not happen |
| 194 | SC_ASYNC_ASSERT_RELEASE(false); |
| 195 | } |
| 196 | break; |
| 197 | case AsyncRequest::State::Submitting: |
| 198 | SC_ASYNC_ASSERT_RELEASE(AsyncEventLoop::Internal::KernelEvents::needsSubmissionWhenReactivating(async)); |
| 199 | break; |
| 200 | } |
| 201 | } |
| 202 | else |
| 203 | { |
| 204 | switch (async.state) |
| 205 | { |
| 206 | case AsyncRequest::State::Free: { |
| 207 | // Nothing to do |
| 208 | } |
| 209 | break; |
| 210 | case AsyncRequest::State::Reactivate: { |
| 211 | // TODO: Is a teardown needed here? |
| 212 | async.state = AsyncRequest::State::Free; |
| 213 | eventLoop.internal.submissions.remove(async); |
| 214 | eventLoop.internal.numberOfSubmissions -= 1; |
| 215 | } |
| 216 | break; |
| 217 | case AsyncRequest::State::Cancelling: |
| 218 | case AsyncRequest::State::Active: |
| 219 | case AsyncRequest::State::Setup: { |
| 220 | // Should not happen |
| 221 | SC_ASYNC_ASSERT_RELEASE(false); |