Changeset c6588ce in mainline for uspace/app/tester/ipc/starve.c


Ignore:
Timestamp:
2012-05-05T08:12:17Z (12 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ee04c28
Parents:
2cc7f16 (diff), d21e935c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mainline changes.

File:
1 moved

Legend:

Unmodified
Added
Removed
  • uspace/app/tester/ipc/starve.c

    r2cc7f16 rc6588ce  
    11/*
    2  * Copyright (c) 2009 Lukas Mejdrech
     2 * Copyright (c) 2012 Vojtech Horky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /** @addtogroup libc
    30  *  @{
    31  */
     29#include <stdio.h>
     30#include <stdlib.h>
     31#include <sys/time.h>
     32#include <io/console.h>
     33#include <async.h>
     34#include "../tester.h"
    3235
    33 /** @file
    34  * ICMP common interface implementation.
    35  * @see icmp_common.h
    36  */
     36#define DURATION_SECS      30
    3737
    38 #include <net/modules.h>
    39 #include <net/icmp_common.h>
    40 #include <ipc/services.h>
    41 #include <ipc/icmp.h>
    42 #include <sys/time.h>
    43 #include <async.h>
     38const char *test_starve_ipc(void)
     39{
     40        const char *err = NULL;
     41        console_ctrl_t *console = console_init(stdin, stdout);
     42        if (console == NULL) {
     43                return "Failed to init connection with console.";
     44        }
     45       
     46        struct timeval start;
     47        if (gettimeofday(&start, NULL) != 0) {
     48                err = "Failed getting the time";
     49                goto leave;
     50        }
     51       
     52        TPRINTF("Intensive computation shall be imagined (for %ds)...\n", DURATION_SECS);
     53        TPRINTF("Press a key to terminate prematurely...\n");
     54        while (true) {
     55                struct timeval now;
     56                if (gettimeofday(&now, NULL) != 0) {
     57                        err = "Failed getting the time";
     58                        goto leave;
     59                }
     60               
     61                if (tv_sub(&now, &start) >= DURATION_SECS * 1000000L)
     62                        break;
     63               
     64                kbd_event_t ev;
     65                suseconds_t timeout = 0;
     66                bool has_event = console_get_kbd_event_timeout(console, &ev, &timeout);
     67                if (has_event && (ev.type == KEY_PRESS)) {
     68                        TPRINTF("Key %d pressed, terminating.\n", ev.key);
     69                        break;
     70                }
     71        }
    4472
    45 /** Connect to the ICMP module.
    46  *
    47  * @return ICMP module session.
    48  *
    49  */
    50 async_sess_t *icmp_connect_module(void)
    51 {
    52         return connect_to_service(SERVICE_ICMP);
     73        // FIXME - unless a key was pressed, the answer leaked as no one
     74        // will wait for it.
     75        // We cannot use async_forget() directly, though. Something like
     76        // console_forget_pending_kbd_event() shall come here.
     77
     78        TPRINTF("Terminating...\n");
     79
     80leave:
     81        console_done(console);
     82
     83        return err;
    5384}
    54 
    55 /** @}
    56  */
Note: See TracChangeset for help on using the changeset viewer.