Changes in / [116a2ea:4f102fa]
- Files:
-
- 6 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/io.cfa
r116a2ea r4f102fa 551 551 enqueue(this.pending, (__outstanding_io&)pa); 552 552 553 wait( pa. sem);553 wait( pa.waitctx ); 554 554 555 555 return pa.ctx; … … 578 578 pa.ctx = ctx; 579 579 580 post( pa. sem);580 post( pa.waitctx ); 581 581 } 582 582 … … 613 613 } 614 614 615 wait( ei. sem);615 wait( ei.waitctx ); 616 616 617 617 __cfadbg_print_safe(io, "Kernel I/O : %u submitted from arbiter\n", have); … … 631 631 __submit_only(&ctx, ei.idxs, ei.have); 632 632 633 post( ei. sem);633 post( ei.waitctx ); 634 634 } 635 635 -
libcfa/src/concurrency/io/types.hfa
r116a2ea r4f102fa 107 107 struct __outstanding_io { 108 108 inline Colable; 109 single_sem sem;109 oneshot waitctx; 110 110 }; 111 111 static inline __outstanding_io *& Next( __outstanding_io * n ) { return (__outstanding_io *)Next( (Colable *)n ); } -
libcfa/src/concurrency/kernel/cluster.hfa
r116a2ea r4f102fa 21 21 22 22 #include <limits.h> 23 #include <inttypes.h> 23 24 24 25 #include "clock.hfa" … … 30 31 31 32 // warn normally all ints 32 #define warn_large_before warnf( !strict || old_avg < 33_000_000_000, "Suspiciously large previous average: %'llu (%llx), %' ldms \n", old_avg, old_avg, program()`ms )33 #define warn_large_after warnf( !strict || ret < 33_000_000_000, "Suspiciously large new average after %' ldms cputime: %'llu (%llx) from %'llu-%'llu (%'llu, %'llu) and %'llu\n", program()`ms, ret, ret, currtsc, intsc, new_val, new_val / 1000000, old_avg )33 #define warn_large_before warnf( !strict || old_avg < 33_000_000_000, "Suspiciously large previous average: %'llu (%llx), %'" PRId64 "ms \n", old_avg, old_avg, program()`ms ) 34 #define warn_large_after warnf( !strict || ret < 33_000_000_000, "Suspiciously large new average after %'" PRId64 "ms cputime: %'llu (%llx) from %'llu-%'llu (%'llu, %'llu) and %'llu\n", program()`ms, ret, ret, currtsc, intsc, new_val, new_val / 1000000, old_avg ) 34 35 35 36 // 8X linear factor is just 8 * x … … 41 42 static inline __readyQ_avg_t __to_readyQ_avg(unsigned long long intsc) { if(unlikely(0 == intsc)) return 0.0; else return log2(intsc); } 42 43 43 #define warn_large_before warnf( !strict || old_avg < 35.0, "Suspiciously large previous average: %'lf, %' ldms \n", old_avg, program()`ms )44 #define warn_large_after warnf( !strict || ret < 35.3, "Suspiciously large new average after %' ldms cputime: %'lf from %'llu-%'llu (%'llu, %'llu) and %'lf\n", program()`ms, ret, currtsc, intsc, new_val, new_val / 1000000, old_avg ); \44 #define warn_large_before warnf( !strict || old_avg < 35.0, "Suspiciously large previous average: %'lf, %'" PRId64 "ms \n", old_avg, program()`ms ) 45 #define warn_large_after warnf( !strict || ret < 35.3, "Suspiciously large new average after %'" PRId64 "ms cputime: %'lf from %'llu-%'llu (%'llu, %'llu) and %'lf\n", program()`ms, ret, currtsc, intsc, new_val, new_val / 1000000, old_avg ); \ 45 46 verify(ret >= 0) 46 47 -
libcfa/src/parseargs.cfa
r116a2ea r4f102fa 1 1 #include "parseargs.hfa" 2 2 3 #include <ctype.h> 3 4 #include <stdint.h> 4 5 #include <string.h> 5 6 #include <errno.h> 6 7 #include <unistd.h> 7 #include <assert.h>8 8 9 9 extern "C" { … … 74 74 75 75 int maxv = 'h'; 76 assert( opt_count > 0 ); 77 char optstring[opt_count * 3] = { '\0' }; 76 char optstring[(opt_count * 3) + 2] = { '\0' }; 78 77 { 79 78 int idx = 0; … … 272 271 bool parse(const char * arg, int & value) { 273 272 char * end; 274 int r = strtoll(arg, &end, 10); 273 274 errno = 0; 275 long long int r = strtoll(arg, &end, 0); 276 if(errno) return false; 275 277 if(*end != '\0') return false; 276 277 value = r; 278 return true; 278 if(r > (int)MAX) return false; 279 if(r < (int)MIN) return false; 280 281 value = r; 282 return true; 283 } 284 285 static unsigned long long int strict_strtoull( const char * arg, int base) { 286 errno = 0; 287 { 288 const char * in = arg; 289 for() { 290 if('\0' == *in) { 291 errno = EINVAL; 292 return 0; 293 } 294 if(!isspace(*in)) break; 295 in++; 296 } 297 if(!isdigit(*in)) { 298 errno = EINVAL; 299 return 0; 300 } 301 } 302 303 *char end; 304 unsigned long long int r = strtoull(arg, &end, base); 305 if(*end != '\0') errno = EINVAL; 306 if(errno) return 0; 307 return r; 279 308 } 280 309 281 310 bool parse(const char * arg, unsigned & value) { 282 char * end; 283 unsigned long long int r = strtoull(arg, &end, 10); 284 if(*end != '\0') return false; 311 unsigned long long int r = strict_strtoull(arg, 0); 312 if(errno) return false; 285 313 if(r > (unsigned)MAX) return false; 286 314 … … 290 318 291 319 bool parse(const char * arg, unsigned long & value) { 292 char * end; 293 unsigned long long int r = strtoull(arg, &end, 10); 294 if(*end != '\0') return false; 320 unsigned long long int r = strict_strtoull(arg, 0); 321 if(errno) return false; 295 322 if(r > (unsigned long)MAX) return false; 296 323 … … 300 327 301 328 bool parse(const char * arg, unsigned long long & value) { 302 char * end; 303 unsigned long long int r = strtoull(arg, &end, 10); 304 if(*end != '\0') return false; 305 if(r > (unsigned long long)MAX) return false; 306 307 value = r; 308 return true; 329 unsigned long long int r = strict_strtoull(arg, 0); 330 if(errno) return false; 331 if(r > (unsigned long long)MAX) return false; 332 333 value = r; 334 return true; 309 335 } 310 336 -
tests/meta/fork+exec.cfa
r116a2ea r4f102fa 13 13 // Update Count : 14 14 // 15 #include <stdlib.h>16 #include <stdio.h>17 #include <string.h>18 15 19 #include <errno.h> 20 #include <signal.h> 21 22 extern "C" { 23 #include <sys/types.h> 24 #include <sys/wait.h> 25 #include <unistd.h> 26 } 27 28 int true_main(const char * exec); 16 #include "fork+exec.hfa" 29 17 30 18 int main(int argc, char * argv[]) { 31 if(!getenv("CFATEST_FORK_EXEC_TEXT")) return true_main(argv[0]);19 check_main(argv[0]); 32 20 33 21 printf("arguments are:\n"); … … 42 30 } 43 31 44 int do_wait(pid_t pid) {45 int wstatus;46 int options = 0;47 pid_t ret = waitpid(pid, &wstatus, options);48 fflush(stdout);49 if(ret < 0) {50 fprintf(stderr, "Fork returned with error: %d '%s'\n", errno, strerror(errno));51 exit(1);52 }53 return wstatus;54 }55 32 56 pid_t strict_fork(void) {57 fflush(stdout);58 pid_t ret = fork();59 if(ret < 0) {60 fprintf(stderr, "Fork returned with error: %d '%s'\n", errno, strerror(errno));61 exit(1);62 }63 return ret;64 }65 33 66 void print_status(int wstatus) { 67 printf("Child status:\n"); 68 printf(" WIFEXITED : %d\n", WIFEXITED(wstatus)); 69 printf(" WEXITSTATUS : %d\n", WEXITSTATUS(wstatus)); 70 printf(" WIFSIGNALED : %d\n", WIFSIGNALED(wstatus)); 71 printf(" WTERMSIG : %d\n", WTERMSIG(wstatus)); 72 printf(" WCOREDUMP : %d\n", WCOREDUMP(wstatus)); 73 printf(" WIFSTOPPED : %d\n", WIFSTOPPED(wstatus)); 74 printf(" WSTOPSIG : %d\n", WSTOPSIG(wstatus)); 75 printf(" WIFCONTINUED: %d\n", WIFCONTINUED(wstatus)); 76 } 77 78 int true_main(const char * path) { 79 char * env[] = { "CFATEST_FORK_EXEC_TEXT=1", 0p }; 80 34 int true_main(const char * path, char * env[]) { 81 35 printf("no arg:\n"); 82 36 if(pid_t child = strict_fork(); child == 0) {
Note: See TracChangeset
for help on using the changeset viewer.