Revert "substituted the fork with a pthread"

This reverts commit 5afeaac470.

execve()  does  not  return on success, and the text, data, bss, and stack of the calling process are overwritten by
that of the program loaded. means we cannot call exec() from a thread, we must use fork.

next try i'll use environment vars to pass mountpoint to forked exec.
This commit is contained in:
Jaromil 2011-02-07 09:44:59 +01:00
parent cc9ecb9c20
commit 2751d71708

View File

@ -26,8 +26,6 @@
#include <sys/types.h>
#include <sys/wait.h>
#include <pthread.h>
#include <gtk/gtk.h>
#include <libnotify/notify.h>
@ -75,7 +73,6 @@ int main(int argc, char **argv) {
snprintf(mapper,255, "%s", argv[1]);
}
if(argc<3) sprintf(filename, "unknown");
else snprintf(filename,255, "%s", argv[2]);
@ -135,7 +132,6 @@ int main(int argc, char **argv) {
notify_uninit();
exit(0);
}
@ -162,42 +158,29 @@ gboolean cb_view(GtkWidget *w, GdkEvent *e) {
return FALSE;
}
if (cpid == 0) { // Child
execlp("tomb-open", "tomb-open", "-q", mountpoint ,(char*)NULL);
execlp("tomb-open", "tomb-open", mountpoint ,(char*)NULL);
exit(1);
}
return TRUE;
}
void* thread_close(void *arg) {
char *map = (char*)arg;
execlp("tomb", "tomb", "-q", "close", map, (char*)NULL);
return NULL;
}
gboolean cb_close(GtkWidget *w, GdkEvent *e) {
pthread_t thread;
pthread_attr_t attr;
int *res;
if(pthread_attr_init (&attr) == -1) {
fprintf(stderr, "error initializing POSIX thread attribute\n");
pid_t cpid = fork();
int res;
if (cpid == -1) {
fprintf(stderr,"error: problem forking process\n");
return FALSE;
}
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_JOINABLE);
pthread_create(&thread, &attr, thread_close, mapper);
pthread_join(thread,(void**)&res);
if(*res==0) {
pthread_attr_destroy(&attr);
if (cpid == 0) { // Child
execlp("tomb", "tomb", "close", mapper, (char*)NULL);
exit(1);
}
waitpid(cpid, &res, 0);
if(res==0) {
gtk_main_quit();
notify_uninit();
exit(0);
}
pthread_attr_destroy(&attr);
return TRUE;
}