X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest%2Fprocess.h;h=128ce41219a18d1fe1497a4b1a68d834ae210d66;hb=af0b0743e22d296284dae3d7fae39635baa00912;hp=2701127a2b829a10d7e88a7603def6c369b47ef2;hpb=5fbc1d498f548026cfdcd63f28330d687761f2a3;p=dpdk.git diff --git a/app/test/process.h b/app/test/process.h index 2701127a2b..128ce41219 100644 --- a/app/test/process.h +++ b/app/test/process.h @@ -5,12 +5,16 @@ #ifndef _PROCESS_H_ #define _PROCESS_H_ +#include /* errno */ #include /* PATH_MAX */ #include /* basename et al */ #include /* NULL */ +#include /* strerror */ #include /* readlink */ #include +#include /* strlcpy */ + #ifdef RTE_EXEC_ENV_FREEBSD #define self "curproc" #define exe "file" @@ -19,9 +23,11 @@ #define exe "exe" #endif +#ifdef RTE_LIBRTE_PDUMP #include extern void *send_pkts(void *empty); extern uint16_t flag_for_send_pkts; +#endif /* * launches a second copy of the test process using the given argv parameters, @@ -36,7 +42,9 @@ process_dup(const char *const argv[], int numargs, const char *env_value) char *argv_cpy[numargs + 1]; int i, fd, status; char path[32]; +#ifdef RTE_LIBRTE_PDUMP pthread_t thread; +#endif pid_t pid = fork(); if (pid < 0) @@ -63,19 +71,30 @@ process_dup(const char *const argv[], int numargs, const char *env_value) /* set the environment variable */ if (setenv(RECURSIVE_ENV_VAR, env_value, 1) != 0) rte_panic("Cannot export environment variable\n"); - if (execv("/proc/" self "/" exe, argv_cpy) < 0) - rte_panic("Cannot exec\n"); + + strlcpy(path, "/proc/" self "/" exe, sizeof(path)); + if (execv(path, argv_cpy) < 0) { + if (errno == ENOENT) { + printf("Could not find '%s', is procfs mounted?\n", + path); + } + rte_panic("Cannot exec: %s\n", strerror(errno)); + } } /* parent process does a wait */ +#ifdef RTE_LIBRTE_PDUMP if ((strcmp(env_value, "run_pdump_server_tests") == 0)) pthread_create(&thread, NULL, &send_pkts, NULL); +#endif while (wait(&status) != pid) ; +#ifdef RTE_LIBRTE_PDUMP if ((strcmp(env_value, "run_pdump_server_tests") == 0)) { flag_for_send_pkts = 0; pthread_join(thread, NULL); } +#endif return status; }