<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/97816>97816</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [OpenMP] Task priority implementation can lead to life-lock
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            openmp:libomp
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          jprotze
      </td>
    </tr>
</table>

<pre>
    ```C
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
int fib(int n) {
 int i, j;
  if (n<2) {
    return n;
  } else {
    #pragma omp task shared(i) priority(n/2)
    {
      printf("%i: fib(%i)\n", omp_get_thread_num(), n-1);
      i=fib(n-1);
    }
    #pragma omp task shared(j) priority(n/2)
    {
      printf("%i: fib(%i)\n", omp_get_thread_num(), n-2);
      j=fib(n-2);
    }
    #pragma omp taskwait
    return i+j;
  }
}
int main(int argc, char** argv) {
  int n = 5;
  if (argc>1) 
    n = atoi(argv[1]);
 printf("Max prio = %i\n", omp_get_max_task_priority());
  #pragma omp parallel sections
  {
    printf("fib(%i) = %i\n", n, fib(n));
 }
  return 0;
}
```
The code executes successfully, if `OMP_MAX_TASK_PRIORITY=0` or `KMP_TASK_STEALING_CONSTRAINT=0`. The following command stalls after executing the first few tasks:
```
$ env OMP_NUM_THREADS=2 OMP_MAX_TASK_PRIORITY=2 KMP_TASK_STEALING_CONSTRAINT=1 ./a.out
Max prio = 2
0: fib(4)
0: fib(3)
1: fib(3)
```
At this point, only tasks with lower priority would be available for scheduling, but they are not considered because higher priority tasks are enqueued which cannot be scheduled due to the TSC. 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEVU1vqzgX_jXO5qgR2JCURRY0NO9b3UlbtRlpZhUZOATnGpuxTdLOrx8Z0pT0Q3d2I1UNnO_nOY8Nt1bsFOKCxDckzia8c7U2i31rtPsbJ7kuXxdkFgx_SxJkJEgJZUIVsisRCFtaVwo9rQm7_cYrRf6tWzftyCeUg0rkhF77J0VoAmR-M_jAmwShS9gT9mYDUQGh14qwJb2MBgCDrjMK1CiczDNAafEykFDWGr5rOOimBcftT7A1N1j6QXzZ1ghthHvtW9GVbzXKHpcCH6tcReg1oZTQWBCWnjD1bzQh8VL1vqVvt92h27raIC-3qmv6sMT71FXon9hFcUFYNhT7wk3m2b_DtP_vMNHPmPYjTJ_cv8B05MJ9Wrgg9GZ_ufST9N4evJQaLtRJaNzsCj9eUXNDaEpo6k2HD4LqJQmEZRB_EmBfgd2Gfcp5niGaOy2GkAOJb0ISZxcgx9yu-Uu_lz6vp_Yzrw1_2Xro29ECe3rHxF0y1XLDpUQJFgsntLLvzIyoHg9ysdyvplH-32lrH7uPdnbaSHB2vu_i7U4ZXjc1QqFLBHzBonNowXZFgdZWnZSvvpknehY8rB-36_SP7SZ9_rF9fLp7eLrb_ElY5iuBNj7kx_pxcD9vbtPf7u7_t10-3D9vntK7-80pcgq-X6Wl1EehdlDopuGqBOu4lBZ45dCcJvFu54OFsQ4qPPa6s4SlX-IgNAJUB_Bz3v--3m7-_3SbZs-EZRS-m53CL0YOYUroik91dxL7hU7oYAveD2V0PssjIzsbw6-MH3CkDlwtLLRaKNfLT8nXATochatB6iOa8yUCR93JEnIEfuBC8lx6eg3Yosayk0LtfI2881XxFbhBUNpBoZUVJRr0qQXvLEItdvW48NDSJ6D6q8MOSzjWoqih4MqXyPGtCZZQdghO9_vaPC-nMCkXrExYwie4COc0COdJEkeTelGWsygqwyhhQVVWLKjiBKNZQGcVi5JoTidiQQMaBfMgDsMojsNpPEt4fM1DxBmyeYAkCrDhQk6lPDRTbXYTYW2Hi2R-Hc4mkucobf9NpVS3qJqWsFSKXDetP0FxNjELn3mVdztLokAK6-x7LSec7D_JDy2q9SOJM9j4K_xMi2haiQ0qx_2B9mSARF569FJUeCV18XPSGbmonWt7tdIVoaudcHWXTwvdELry3U4_V63ReywcoasehiV0NSA5LOg_AQAA__9eGlPQ">