nicer error handling
This commit is contained in:
parent
9b5db80b65
commit
20f27c7a9f
1 changed files with 28 additions and 37 deletions
65
code/leak.c
65
code/leak.c
|
@ -19,6 +19,28 @@ int spray[SPRAY][2];
|
||||||
int pipes[PIPES][2];
|
int pipes[PIPES][2];
|
||||||
char buffer[0x100];
|
char buffer[0x100];
|
||||||
|
|
||||||
|
void
|
||||||
|
error(char *origin)
|
||||||
|
{
|
||||||
|
switch (errno) {
|
||||||
|
case EFAULT:
|
||||||
|
printf("%s: EFAULT\n", origin);
|
||||||
|
break;
|
||||||
|
case EINVAL:
|
||||||
|
printf("%s: EINVAL\n", origin);
|
||||||
|
break;
|
||||||
|
case EMFILE:
|
||||||
|
printf("%s: EMFILE\n", origin);
|
||||||
|
break;
|
||||||
|
case ENFILE:
|
||||||
|
printf("%s: ENFILE\n", origin);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("%s: unknown\n", origin);
|
||||||
|
}
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
extern inline size_t
|
extern inline size_t
|
||||||
rdtsc_begin(void)
|
rdtsc_begin(void)
|
||||||
{
|
{
|
||||||
|
@ -50,45 +72,14 @@ main(void)
|
||||||
printf("main: spray to reduce TLB noise part 1: %u objects\n",
|
printf("main: spray to reduce TLB noise part 1: %u objects\n",
|
||||||
SPRAY / 2);
|
SPRAY / 2);
|
||||||
for (size_t i = 0; i < SPRAY / 2; i++) {
|
for (size_t i = 0; i < SPRAY / 2; i++) {
|
||||||
int ret;
|
if (pipe2(spray[i], O_NONBLOCK) < 0) {
|
||||||
ret = pipe2(spray[i], O_NONBLOCK);
|
error("main: spray one: pipe2");
|
||||||
if (ret < 0) {
|
|
||||||
switch (errno) {
|
|
||||||
case EFAULT:
|
|
||||||
printf(
|
|
||||||
"main: error: object %lu pipe2: EFAULT\n",
|
|
||||||
i);
|
|
||||||
break;
|
|
||||||
case EINVAL:
|
|
||||||
printf(
|
|
||||||
"main: error: object %lu pipe2: EINVAL\n",
|
|
||||||
i);
|
|
||||||
break;
|
|
||||||
case EMFILE:
|
|
||||||
printf(
|
|
||||||
"main: error: object %lu pipe2: EMFILE\n",
|
|
||||||
i);
|
|
||||||
break;
|
|
||||||
case ENFILE:
|
|
||||||
printf(
|
|
||||||
"main: error: object %lu pipe2: ENFILE\n",
|
|
||||||
i);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
printf("main: error: object %lu pipe2: %i\n", i,
|
|
||||||
errno);
|
|
||||||
}
|
|
||||||
exit(-1);
|
|
||||||
}
|
}
|
||||||
ret = fcntl(spray[i][0], F_SETPIPE_SZ, 8192);
|
if (fcntl(spray[i][0], F_SETPIPE_SZ, 8192) < 0) {
|
||||||
if (ret < 0) {
|
error("main: spray one: fcntl");
|
||||||
printf("main: error: fcntl: object %lu\n", i);
|
|
||||||
exit(-1);
|
|
||||||
}
|
}
|
||||||
ret = write(spray[i][1], buffer, 8);
|
if (write(spray[i][1], buffer, 8) < 0) {
|
||||||
if (ret < 0) {
|
error("main: spray one: write");
|
||||||
printf("main: error: write: object %lu\n", i);
|
|
||||||
exit(-1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue