X-Git-Url: https://git.distorted.org.uk/~mdw/fwd/blobdiff_plain/270b8403580b7fd0feae995b9e8bad4a2ff660ff..858a73afbf5018d74920761f7015ac2e7d3987b6:/endpt.c diff --git a/endpt.c b/endpt.c index a1b6ac7..97efef1 100644 --- a/endpt.c +++ b/endpt.c @@ -47,6 +47,7 @@ typedef struct chanpair { typedef struct tango { struct tango *next, *prev; /* A big list of all tangos */ endpt *a, *b; /* The two endpoints */ + char *desc; /* Description of the connection */ unsigned s; /* State of the connection */ chanpair *c; /* The pair of channels */ } tango; @@ -121,6 +122,10 @@ void endpt_kill(endpt *a) */ if (a->f & b->f & EPF_FILE) { + if (t->c->ab.err) + fw_log(NOW, "[%s] error: %s", t->desc, strerror(t->c->ab.err)); + else if (t->c->ba.err) + fw_log(NOW, "[%s] error: %s", t->desc, strerror(t->c->ba.err)); if (t->s & EPS_AB) chan_close(&t->c->ab); if (!(b->f & EPF_PENDING) && (t->s & EPS_BA)) @@ -139,6 +144,8 @@ void endpt_kill(endpt *a) t->prev->next = t->next; else tangos = t->next; + if (t->desc) + xfree(t->desc); DESTROY(t); } @@ -167,6 +174,7 @@ void endpt_killall(void) * * Arguments: @endpt *a@ = pointer to first endpoint * @endpt *b@ = pointer to second endpoint + * @const char *desc@ = description of connection * * Returns: --- * @@ -174,9 +182,13 @@ void endpt_killall(void) * which are already joined; in fact, the the right thing to do * when your endpoint decides that it's not pending any more is * to join it to its partner again. + * + * If the endpoints are already connected then the description + * string is ignored. The endpoint manager takes a copy of the + * string, so you don't need to keep it around. */ -void endpt_join(endpt *a, endpt *b) +void endpt_join(endpt *a, endpt *b, const char *desc) { tango *t = a->t; @@ -191,6 +203,7 @@ void endpt_join(endpt *a, endpt *b) a->t = b->t = t; t->s = EPS_AB | EPS_BA; t->c = 0; + t->desc = xstrdup(desc); if (tangos) tangos->prev = t; tangos = t;