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


Ignore:
Timestamp:
2012-04-20T07:32:57Z (12 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
097f421
Parents:
90f067d9 (diff), 606c369 (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

    r90f067d9 ra7a7f8c  
    11/*
    2  * Copyright (c) 2009 Lukas Mejdrech
     2 * Copyright (c) 2012 Vojtech Horky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /** @addtogroup libnet
    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 #include <tl_remote.h>
    34 #include <generic.h>
    35 #include <packet_client.h>
    36 #include <ipc/services.h>
    37 #include <ipc/tl.h>
    38 #include <net/device.h>
    39 #include <net/packet.h>
    40 #include <async.h>
     36#define DURATION_SECS      30
    4137
    42 /** Notify the remote transport layer modules about the received packet/s.
    43  *
    44  * @param[in] sess      Transport layer module session.
    45  * @param[in] device_id Device identifier.
    46  * @param[in] packet    Received packet or the received packet queue.
    47  *                      The packet queue is used to carry a fragmented
    48  *                      datagram. The first packet contains the headers,
    49  *                      the others contain only data.
    50  * @param[in] target    Target transport layer module service to be
    51  *                      delivered to.
    52  * @param[in] error     Packet error reporting service. Prefixes the
    53  *                      received packet.
    54  *
    55  * @return EOK on success.
    56  *
    57  */
    58 int tl_received_msg(async_sess_t *sess, nic_device_id_t device_id, packet_t *packet,
    59     services_t target, services_t error)
     38const char *test_starve_ipc(void)
    6039{
    61         return generic_received_msg_remote(sess, NET_TL_RECEIVED, device_id,
    62             packet_get_id(packet), target, error);
     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        }
     72
     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;
    6384}
    64 
    65 /** @}
    66  */
Note: See TracChangeset for help on using the changeset viewer.