Changeset d4ec49e in mainline for uspace/app/tester/proc/task_wait.c


Ignore:
Timestamp:
2019-08-07T05:25:59Z (6 years ago)
Author:
Matthieu Riolo <matthieu.riolo@…>
Children:
3ea98e8
Parents:
55fe220
git-author:
Michal Koutný <xm.koutny+hos@…> (2015-10-14 23:13:41)
git-committer:
Matthieu Riolo <matthieu.riolo@…> (2019-08-07 05:25:59)
Message:

taskman: Implement waiting both for retval and exit
Conflicts:

uspace/lib/c/generic/task.c
uspace/lib/c/include/task.h

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/tester/proc/task_wait.c

    r55fe220 rd4ec49e  
    7474
    7575        TPRINTF("waiting...");
    76         rc = task_wait(&wait, &texit, &retval);
    77         TPRINTF("done.\n");
    78         TASSERT(rc == EOK);
     76        texit = TASK_EXIT_RUNNING; retval = 255;
     77        rc = task_wait(&wait, &texit, &retval);
     78        TPRINTF("done.\n");
     79        TASSERT(rc == EOK);
     80        TASSERT(task_wait_get(&wait) == 0);
    7981        TASSERT(texit == TASK_EXIT_UNEXPECTED);
    8082        TPRINTF("OK\n");
     
    8890
    8991        TPRINTF("waiting...");
     92        texit = TASK_EXIT_RUNNING; retval = 255;
    9093        rc = task_wait(&wait, &texit, &retval);
    9194        TPRINTF("done.\n");
    9295        TASSERT(rc == EINVAL);
     96        TASSERT(task_wait_get(&wait) == 0);
    9397        TPRINTF("OK\n");
    9498        /* ---- */
     
    101105
    102106        TPRINTF("waiting...");
    103         rc = task_wait(&wait, &texit, &retval);
    104         TPRINTF("done.\n");
    105         TASSERT(rc == EOK);
     107        texit = TASK_EXIT_RUNNING; retval = 255;
     108        rc = task_wait(&wait, &texit, &retval);
     109        TPRINTF("done.\n");
     110        TASSERT(rc == EOK);
     111        TASSERT(task_wait_get(&wait) == 0);
    106112        TASSERT(texit == TASK_EXIT_UNEXPECTED);
    107113        /* retval is undefined */
     
    109115        /* ---- */
    110116
    111         TPRINTF("21 ignore retval\n");
     117        TPRINTF("21 ignore retval and still wait for exit\n");
    112118
    113119        task_wait_set(&wait, TASK_WAIT_EXIT);
    114         rc = dummy_task_spawn(&tid, &wait, STR_JOB_OK);
    115         TASSERT(rc == EOK);
    116 
    117         TPRINTF("waiting...");
    118         rc = task_wait(&wait, &texit, &retval);
    119         TPRINTF("done.\n");
    120         TASSERT(rc == EOK);
     120        /* STR_JOB_OK to emulate daemon that eventually terminates */
     121        rc = dummy_task_spawn(&tid, &wait, STR_JOB_OK);
     122        TASSERT(rc == EOK);
     123
     124        TPRINTF("waiting...");
     125        texit = TASK_EXIT_RUNNING; retval = 255;
     126        rc = task_wait(&wait, &texit, &retval);
     127        TPRINTF("done.\n");
     128        TASSERT(rc == EOK);
     129        TASSERT(task_wait_get(&wait) == 0);
    121130        TASSERT(texit == TASK_EXIT_NORMAL);
    122131        /* retval is unknown */
     
    131140
    132141        TPRINTF("waiting...");
    133         rc = task_wait(&wait, &texit, &retval);
    134         TPRINTF("done.\n");
    135         TASSERT(rc == EOK);
     142        texit = TASK_EXIT_RUNNING; retval = 255;
     143        rc = task_wait(&wait, &texit, &retval);
     144        TPRINTF("done.\n");
     145        TASSERT(rc == EOK);
     146        TASSERT(task_wait_get(&wait) == 0);
    136147        /* exit is not expected */
    137148        TASSERT(retval == EOK);
     
    142153        TPRINTF("23 partial match (non-exited task)\n");
    143154
    144         // TODO should update wait for synchronized exit waiting
    145155        task_wait_set(&wait, TASK_WAIT_RETVAL | TASK_WAIT_EXIT);
    146156        rc = dummy_task_spawn(&tid, &wait, STR_DAEMON);
     
    148158
    149159        TPRINTF("waiting...");
    150         rc = task_wait(&wait, &texit, &retval);
    151         TPRINTF("done.\n");
    152         TASSERT(rc == EOK);
     160        texit = TASK_EXIT_RUNNING; retval = 255;
     161        rc = task_wait(&wait, &texit, &retval);
     162        TPRINTF("done.\n");
     163        TASSERT(rc == EOK);
     164        TASSERT(task_wait_get(&wait) == TASK_WAIT_EXIT);
    153165        /* exit is not expected */
    154166        TASSERT(retval == EOK);
     
    164176
    165177        TPRINTF("waiting...");
    166         rc = task_wait(&wait, &texit, &retval);
    167         TPRINTF("done.\n");
    168         TASSERT(rc == EOK);
     178        texit = TASK_EXIT_RUNNING; retval = 255;
     179        rc = task_wait(&wait, &texit, &retval);
     180        TPRINTF("done.\n");
     181        TASSERT(rc == EOK);
     182        TASSERT(task_wait_get(&wait) == 0);
    169183        TASSERT(texit == TASK_EXIT_NORMAL);
    170184        /* retval is unknown */
     
    180194
    181195        TPRINTF("waiting...");
    182         rc = task_wait(&wait, &texit, &retval);
    183         TPRINTF("done.\n");
    184         TASSERT(rc == EOK);
     196        texit = TASK_EXIT_RUNNING; retval = 255;
     197        rc = task_wait(&wait, &texit, &retval);
     198        TPRINTF("done.\n");
     199        TASSERT(rc == EOK);
     200        /* Job atomically exited, so there's nothing more to wait for. */
     201        TASSERT(task_wait_get(&wait) == 0);
    185202        /* exit is unknown */
    186203        TASSERT(retval == EOK);
     
    198215
    199216        TPRINTF("waiting...");
    200         rc = task_wait(&wait, &texit, &retval);
    201         TPRINTF("done.\n");
    202         TASSERT(rc == EOK);
     217        texit = TASK_EXIT_RUNNING; retval = 255;
     218        rc = task_wait(&wait, &texit, &retval);
     219        TPRINTF("done.\n");
     220        TASSERT(rc == EOK);
     221        TASSERT(task_wait_get(&wait) == 0);
     222        TASSERT(texit == TASK_EXIT_NORMAL);
     223        TASSERT(retval == EOK);
     224        TPRINTF("OK\n");
     225        /* ---- */
     226
     227        TPRINTF("14 partially lost wait\n");
     228
     229        task_wait_set(&wait, TASK_WAIT_BOTH);
     230        rc = dummy_task_spawn(&tid, &wait, STR_FAIL);
     231        TASSERT(rc == EOK);
     232
     233        TPRINTF("waiting...");
     234        texit = TASK_EXIT_RUNNING; retval = 255;
     235        rc = task_wait(&wait, &texit, &retval);
     236        TPRINTF("done.\n");
     237        TASSERT(rc == EINVAL);
     238        TASSERT(task_wait_get(&wait) == 0);
     239        TASSERT(texit == TASK_EXIT_UNEXPECTED);
     240        /* retval is undefined */
     241        TPRINTF("OK\n");
     242        /* ---- */
     243
     244        TPRINTF("24 repeated wait\n");
     245
     246        task_wait_set(&wait, TASK_WAIT_BOTH);
     247        rc = dummy_task_spawn(&tid, &wait, STR_DAEMON);
     248        TASSERT(rc == EOK);
     249
     250        TPRINTF("waiting...");
     251        texit = TASK_EXIT_RUNNING; retval = 255;
     252        rc = task_wait(&wait, &texit, &retval);
     253        TPRINTF("done.\n");
     254        TASSERT(rc == EOK);
     255        TASSERT(task_wait_get(&wait) == TASK_WAIT_EXIT);
     256        TASSERT(retval == EOK);
     257        task_kill(tid); /* Terminate daemon */
     258        TPRINTF("waiting 2...");
     259        texit = TASK_EXIT_RUNNING; retval = 255;
     260        rc = task_wait(&wait, &texit, &retval);
     261        TPRINTF("done.\n");
     262        TASSERT(rc == EOK);
     263        TASSERT(task_wait_get(&wait) == 0);
     264        //TASSERT(texit == TASK_EXIT_UNEXPECTED); // TODO resolve this in taskman/kernel
     265        TPRINTF("OK\n");
     266        /* ---- */
     267
     268        TPRINTF("34 double wait in one\n");
     269
     270        task_wait_set(&wait, TASK_WAIT_BOTH);
     271        rc = dummy_task_spawn(&tid, &wait, STR_JOB_OK);
     272        TASSERT(rc == EOK);
     273
     274        TPRINTF("waiting...");
     275        texit = TASK_EXIT_RUNNING; retval = 255;
     276        rc = task_wait(&wait, &texit, &retval);
     277        TPRINTF("done.\n");
     278        TASSERT(rc == EOK);
     279        TASSERT(task_wait_get(&wait) == 0);
    203280        TASSERT(texit == TASK_EXIT_NORMAL);
    204281        TASSERT(retval == EOK);
Note: See TracChangeset for help on using the changeset viewer.