[EMAIL PROTECTED] said:
> On Fri, Dec 01, 2000 at 12:22:57AM -0500 or thereabouts, Ken Weingold wrote:
>
> > When mutt sits for a while on 'Sending message...', is it a mutt or
> > sendmail issue? Or something else?
>
> This is the same problem that I have mentioned earlier. Many thought
> it was a sendmail problem. However, I have made some trials with
> other MUAs, even Xemacs, and they all send normally without problems
> or waiting. I have also gone over my sendmail rc files, and
> everything over again, and all see to be as it was previously.
>
> I can't figure it out.
Being a control freak, I patched mutt to have it show me the sendmail
dialog. Somehow I thought there was a configuration option which would
do this, but I could not find it, hence the ugly patch. Maybe it will
help you uncover your mutt/sendmail interaction issue.
To use: set sendmail_wait=-1. It's not pretty: the curses handling is
a mess and overloading a well defined variable is a bad idea. Caveat
patcher.
-- Pete
diff -ruN mutt-1.3.12-stock/sendlib.c mutt-1.3.12/sendlib.c
--- mutt-1.3.12-stock/sendlib.c Tue Nov 28 11:35:05 2000
+++ mutt-1.3.12/sendlib.c Tue Nov 28 11:36:27 2000
@@ -1740,6 +1740,7 @@
if ((pid = fork ()) == 0)
{
struct sigaction act, oldalrm;
+ int fdmax;
/* save parent's ID before setsid() */
ppid = getppid ();
@@ -1751,16 +1752,20 @@
/* next we close all open files */
#if defined(OPEN_MAX)
- for (fd = 0; fd < OPEN_MAX; fd++)
- close (fd);
+ fdmax = OPEN_MAX;
#elif defined(_POSIX_OPEN_MAX)
- for (fd = 0; fd < _POSIX_OPEN_MAX; fd++)
- close (fd);
+ fdmax = _POSIX_OPEN_MAX;
#else
- close (0);
- close (1);
- close (2);
+ fdmax = 3;
#endif
+ for (fd = 0; fd < fdmax; fd++) {
+ if (fd == 1 && SendmailWait == -1) continue;
+ close (fd);
+ }
+
+ /* for showing sendmail output, end window mode */
+ if (SendmailWait == -1)
+ mutt_endwin(0);
/* now the second fork() */
if ((pid = fork ()) == 0)
@@ -1782,6 +1787,11 @@
if (dup (1) < 0)
_exit (S_ERR);
}
+ else if (SendmailWait == -1)
+ {
+ if (dup(1) < 0)
+ _exit (S_ERR);
+ }
execv (path, args);
_exit (S_ERR);
@@ -1795,7 +1805,8 @@
/* SendmailWait > 0: interrupt waitpid() after SendmailWait seconds
* SendmailWait = 0: wait forever
- * SendmailWait < 0: don't wait
+ * SendmailWait = -1: wait forever, and send stdout/err to console
+ * SendmailWait < -1: don't wait
*/
if (SendmailWait > 0)
{
@@ -1811,7 +1822,7 @@
sigaction (SIGALRM, &act, &oldalrm);
alarm (SendmailWait);
}
- else if (SendmailWait < 0)
+ else if (SendmailWait < -1)
_exit (0xff & EX_OK);
if (waitpid (pid, &st, 0) > 0)
@@ -1856,6 +1867,15 @@
st = S_ERR; /* error */
mutt_unblock_signals_system (1);
+
+ /* for showing sendmail output, end window mode */
+ if (SendmailWait == -1) {
+ mutt_any_key_to_continue(0);
+ clear();
+ cbreak();
+ noecho();
+ refresh();
+ }
return (st);