From b18482e1b051f5a6b20cb981b7eac6555ecbe6c2 Mon Sep 17 00:00:00 2001 From: David Lawrence Ramsey Date: Tue, 26 Jul 2005 00:06:34 +0000 Subject: [PATCH] simplify the previous fix git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2936 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 6 ++---- src/text.c | 23 +++++++++++------------ 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0d3828c2..e239c0e8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -173,10 +173,8 @@ CVS code - no longer needed, and make the error message more similar to what the internal spell checker returns under the same circumstances. (DLR) - - Set the SIGWINCH handler back to the default just before - running the alternate spell checker, so that the alternate - spell checker can handle them, and set it back afterwards. - (DLR) + - Block any pending SIGWINCHes while the alternate spell checker + is running, so that it can handle them. (DLR) do_spell() - When displaying an error message from do_(int|alt)_speller(), don't display the error message corresponding to errno if diff --git a/src/text.c b/src/text.c index 1f83bb1c..174bd9f3 100644 --- a/src/text.c +++ b/src/text.c @@ -1846,8 +1846,6 @@ const char *do_alt_speller(char *tempfile_name) size_t totsize_save = openfile->totsize; /* Our saved value of totsize, used when we spell-check a marked * selection. */ - struct sigaction newaction, oldaction; - /* Original and temporary handlers for SIGWINCH. */ if (old_mark_set) { /* If the mark is on, save the number of the line it starts on, @@ -1874,13 +1872,6 @@ const char *do_alt_speller(char *tempfile_name) } spellargs[arglen - 2] = tempfile_name; - /* Save the original SIGWINCH handler, and set the SIGWINCH handler - * back to the default, so that the alternate spell checker can - * handle a SIGWINCH its own way. */ - sigaction(SIGWINCH, NULL, &newaction); - newaction.sa_handler = SIG_DFL; - sigaction(SIGWINCH, &newaction, &oldaction); - /* Start a new process for the alternate speller. */ if ((pid_spell = fork()) == 0) { /* Start alternate spell program; we are using PATH. */ @@ -1894,11 +1885,19 @@ const char *do_alt_speller(char *tempfile_name) if (pid_spell < 0) return _("Could not fork"); - /* Wait for alternate speller to complete. */ +#ifndef NANO_SMALL + /* Don't handle a pending SIGWINCH until the alternate spell checker + * is finished. */ + allow_pending_sigwinch(FALSE); +#endif + + /* Wait for the alternate spell checker to finish. */ wait(&alt_spell_status); - /* Set the SIGWINCH handler back to the original. */ - sigaction(SIGWINCH, &oldaction, NULL); +#ifndef NANO_SMALL + /* Handle a pending SIGWINCH again. */ + allow_pending_sigwinch(TRUE); +#endif refresh(); -- 2.39.5