Revert two changes to thread requests (#14015)
authorKoundinya Veluri <kouvel@users.noreply.github.com>
Fri, 15 Sep 2017 21:15:25 +0000 (14:15 -0700)
committerGitHub <noreply@github.com>
Fri, 15 Sep 2017 21:15:25 +0000 (14:15 -0700)
commitb8dda0cbf7eae770fc685378ad7c542e2468a209
treee6a5ace0a08363f22021ed46246e9e8125310be3
parenta38aa2433942a2a200ca483c104fb0adf71db6e3
Revert two changes to thread requests (#14015)

Reverting 99db31c41d5057e08cc4701c79f11246b9191a9b and fd91ee1fa23f35130f576c19dfaf35934dc2ce24 to unblock others while trying to figure out what the issues are and how to fix them.

fd91ee1fa23f35130f576c19dfaf35934dc2ce24 is causing @benaadams thread pool perf test (https://github.com/benaadams/ThreadPoolTaskTesting) to hang due to a missed thread request. Somehow wsqActive is ending up at zero while there is a work item in the queue and with no pending thread requests. I don't understand how yet.

99db31c41d5057e08cc4701c79f11246b9191a9b appears to have a potential issue because the order of MarkThreadRequestSatisfied and Dequeue are reversed. For instance, assuming a proc count of 1:
- Initial state: 1 work item enqueued, 1 thread request
- T1 Dispatch: dequeues a work item and requests a thread (0 work items, 1 thread request)
- T1 Dispatch: sees no more work items, returns
- T1 calls Dispatch again due to its own thread request
- T1 Dispatch: After Dequeue (which saw 0 work items) and before MarkThreadRequestSatisfied:
  - Current state: 0 work items, 1 thread request
  - T2 enqueues a work item, sees 1 thread request and does not request a thread (1 work item, 1 thread request)
- T1 Dispatch: MarkThreadRequestSatisfied decrements thread requests (1 work item, 0 thread requests)
- Now after T1 returns, it won't wake up again but there is still one work item in the queue
src/mscorlib/src/System/Threading/ThreadPool.cs