Changeset c6588ce in mainline for uspace/app/tester/ipc/starve.c
- Timestamp:
- 2012-05-05T08:12:17Z (12 years ago)
- 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. - File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/tester/ipc/starve.c
r2cc7f16 rc6588ce 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 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" 32 35 33 /** @file 34 * ICMP common interface implementation. 35 * @see icmp_common.h 36 */ 36 #define DURATION_SECS 30 37 37 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> 38 const 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 } 44 72 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 80 leave: 81 console_done(console); 82 83 return err; 53 84 } 54 55 /** @}56 */
Note:
See TracChangeset
for help on using the changeset viewer.