Changeset 7719958 in mainline for uspace/app/tester/ipc/starve.c
- Timestamp:
- 2012-04-23T22:51:36Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 6a3808e
- Parents:
- 3293a94 (diff), 32fef47 (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. - File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/tester/ipc/starve.c
r3293a94 r7719958 1 1 /* 2 * Copyright (c) 20 09 Lukas Mejdrech2 * Copyright (c) 2012 Vojtech Horky 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 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" 32 35 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 41 37 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) 38 const char *test_starve_ipc(void) 60 39 { 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 80 leave: 81 console_done(console); 82 83 return err; 63 84 } 64 65 /** @}66 */
Note:
See TracChangeset
for help on using the changeset viewer.