proc/fileroller: don't call ncfdplane_destroy() from within callbacks

pull/555/head
nick black 4 years ago
parent ab2a57df1f
commit 6e0fd72e33
No known key found for this signature in database
GPG Key ID: 5F43400C21CBFACC

@ -31,7 +31,7 @@ eofcb(struct ncfdplane* ncfd, int nerrno, void* curry){
fddone = true; fddone = true;
pthread_mutex_unlock(&lock); pthread_mutex_unlock(&lock);
pthread_cond_signal(&cond); pthread_cond_signal(&cond);
return ncfdplane_destroy(ncfd); return nerrno;
} }
int main(int argc, char** argv){ int main(int argc, char** argv){
@ -40,7 +40,6 @@ int main(int argc, char** argv){
opts.inhibit_alternate_screen = true; opts.inhibit_alternate_screen = true;
struct notcurses* nc = notcurses_init(&opts, stdout); struct notcurses* nc = notcurses_init(&opts, stdout);
struct ncplane* n = notcurses_stdplane(nc); struct ncplane* n = notcurses_stdplane(nc);
int ret = -1;
while(*++argv){ while(*++argv){
int fd = open(*argv, O_RDONLY|O_CLOEXEC); int fd = open(*argv, O_RDONLY|O_CLOEXEC);
if(fd < 0){ if(fd < 0){
@ -59,7 +58,7 @@ int main(int argc, char** argv){
} }
done: done:
if(notcurses_stop(nc) || ret){ if(notcurses_stop(nc)){
return EXIT_FAILURE; return EXIT_FAILURE;
} }
return EXIT_SUCCESS; return EXIT_SUCCESS;

@ -31,7 +31,7 @@ eofcb(struct ncfdplane* ncfd, int nerrno, void* curry){
fddone = true; fddone = true;
pthread_mutex_unlock(&lock); pthread_mutex_unlock(&lock);
pthread_cond_signal(&cond); pthread_cond_signal(&cond);
return ncfdplane_destroy(ncfd); return nerrno;
} }
int main(int argc, char** argv){ int main(int argc, char** argv){
@ -47,17 +47,15 @@ int main(int argc, char** argv){
return EXIT_FAILURE; return EXIT_FAILURE;
} }
struct ncplane* n = notcurses_stdplane(nc); struct ncplane* n = notcurses_stdplane(nc);
int ret = -1;
ncsubproc_options nopts = {}; ncsubproc_options nopts = {};
struct ncsubproc* nsproc = ncsubproc_createvp(n, &nopts, *argv, argv, cb, eofcb); struct ncsubproc* nsproc = ncsubproc_createvp(n, &nopts, *argv, argv, cb, eofcb);
pthread_mutex_lock(&lock); pthread_mutex_lock(&lock);
while(!fddone){ while(!fddone){
pthread_cond_wait(&cond, &lock); pthread_cond_wait(&cond, &lock);
} }
ret = 0;
pthread_mutex_unlock(&lock); pthread_mutex_unlock(&lock);
ncsubproc_destroy(nsproc); ncsubproc_destroy(nsproc);
if(notcurses_stop(nc) || ret){ if(notcurses_stop(nc)){
return EXIT_FAILURE; return EXIT_FAILURE;
} }
return EXIT_SUCCESS; return EXIT_SUCCESS;

Loading…
Cancel
Save