chiark
/
gitweb
/
~mdw
/
fwd
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
When a non-file endpoint is attached to a file, keep the file endpoint
[fwd]
/
exec.c
diff --git
a/exec.c
b/exec.c
index 190001760216d4096ad3ebd0014243f2abd378dd..d81aeae166de48027535322b29d20fb485131181 100644
(file)
--- a/
exec.c
+++ b/
exec.c
@@
-1,6
+1,6
@@
/* -*-c-*-
*
/* -*-c-*-
*
- * $Id: exec.c,v 1.
1 1999/07/26 23:33:32
mdw Exp $
+ * $Id: exec.c,v 1.
2 1999/10/22 22:46:17
mdw Exp $
*
* Source and target for executable programs
*
*
* Source and target for executable programs
*
@@
-29,6
+29,11
@@
/*----- Revision history --------------------------------------------------*
*
* $Log: exec.c,v $
/*----- Revision history --------------------------------------------------*
*
* $Log: exec.c,v $
+ * Revision 1.2 1999/10/22 22:46:17 mdw
+ * When a non-file endpoint is attached to a file, keep the file endpoint
+ * open until the nonfile is done. This stops socket sources from
+ * resetting their connection limits too early.
+ *
* Revision 1.1 1999/07/26 23:33:32 mdw
* New sources and targets.
*
* Revision 1.1 1999/07/26 23:33:32 mdw
* New sources and targets.
*
@@
-146,6
+151,7
@@
typedef struct xept {
endpt e;
struct xept *next, *prev;
pid_t kid;
endpt e;
struct xept *next, *prev;
pid_t kid;
+ endpt *f;
const char *desc;
int st;
xargs *xa;
const char *desc;
int st;
xargs *xa;
@@
-627,12
+633,22
@@
static void xept_attach(endpt *e, reffd *in, reffd *out)
return;
}
return;
}
+/* --- @xept_file@ --- */
+
+static void xept_file(endpt *e, endpt *f)
+{
+ xept *xe = (xept *)e;
+ xe->f = f;
+}
+
/* --- @xept_close@ --- */
static void xept_close(endpt *e)
{
xept *xe = (xept *)e;
if (xe->kid == -1) {
/* --- @xept_close@ --- */
static void xept_close(endpt *e)
{
xept *xe = (xept *)e;
if (xe->kid == -1) {
+ if (xe->f)
+ xe->f->ops->close(xe->f);
x_tidy(xe->xa, xe->xo);
DESTROY(xe);
fw_dec();
x_tidy(xe->xa, xe->xo);
DESTROY(xe);
fw_dec();
@@
-678,6
+694,8
@@
static void xept_destroy(xept *xe)
else
xept_list = xe->next;
else
xept_list = xe->next;
+ if (xe->f)
+ xe->f->ops->close(xe->f);
x_tidy(xe->xa, xe->xo);
fw_dec();
DESTROY(xe);
x_tidy(xe->xa, xe->xo);
fw_dec();
DESTROY(xe);
@@
-740,7
+758,7
@@
static void xept_error(char *p, void *v)
/* --- Endpoint operations --- */
/* --- Endpoint operations --- */
-static endpt_ops xept_ops = { xept_attach, 0, xept_close };
+static endpt_ops xept_ops = { xept_attach,
xept_file,
0, xept_close };
/*----- General operations on sources and targets -------------------------*/
/*----- General operations on sources and targets -------------------------*/
@@
-1007,6
+1025,7
@@
static endpt *exec_endpt(xdata *x, const char *desc)
xe->xa = x->xa; xe->xa->ref++;
xe->xo = x->xo; xe->xo->ref++;
xe->kid = -1;
xe->xa = x->xa; xe->xa->ref++;
xe->xo = x->xo; xe->xo->ref++;
xe->kid = -1;
+ xe->f = 0;
xe->desc = desc;
return (&xe->e);
}
xe->desc = desc;
return (&xe->e);
}