Skip to content

Commit

Permalink
fixes a hanging swaygrab
Browse files Browse the repository at this point in the history
swaywm#1350 is fixed with this.
The commit that change swaygrab to use fork instead of Popen tried to
write to the read end of the pipe in the child branch and exec in the
parent branch.
This commit fixes both of those and closes the write fd after writing,
so convert actually exits.
  • Loading branch information
Markus Ongyerth committed Sep 11, 2017
1 parent 5e8f83f commit 22656ae
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions swaygrab/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,19 @@ void grab_and_apply_magick(const char *file, const char *payload,
if ((child = fork()) < 0) {
sway_log(L_ERROR, "Swaygrab failed to fork.");
exit(EXIT_FAILURE);
} else if (child == 0) {
} else if (child != 0) {
close(fd[0]);
write(fd[1], pixels, len);
close(fd[1]);
write(fd[0], pixels, len);
free(pixels - 9);
waitpid(child, NULL, 0);
} else {
close(fd[1]);
if (dup2(fd[0], 0) != 0) {
sway_log(L_ERROR, "Could not fdup the pipe");
}
close(fd[0]);
execlp("convert", "-depth", "8", "-size", size, "rgba:-", "-flip", file, NULL);
execlp("convert", "convert", "-depth", "8", "-size", size, "rgba:-", "-flip", file, NULL);
sway_log(L_ERROR, "Swaygrab could not run convert.");
exit(EXIT_FAILURE);
}
Expand Down Expand Up @@ -104,7 +109,7 @@ void grab_and_apply_movie_magic(const char *file, const char *payload,
"-video_size %dx%d -pixel_format argb "
"-i pipe:0 -r %d -vf vflip %s";
char *cmd = malloc(strlen(fmt) - 8 /*args*/
+ strlen(ffmpeg_opts) + numlen(width) + numlen(height)
+ strlen(ffmpeg_opts) + numlen(width) + numlen(height)
+ numlen(framerate) * 2 + strlen(file) + 1);
sprintf(cmd, fmt, ffmpeg_opts, framerate, width, height, framerate, file);

Expand Down

0 comments on commit 22656ae

Please sign in to comment.