* Sebastian Hammer, Adam Dickmeiss
*
* $Log: queue.c,v $
- * Revision 1.4 1995-10-17 12:18:59 adam
+ * Revision 1.11 1996-07-03 13:31:14 adam
+ * The xmalloc/xfree functions from YAZ are used to manage memory.
+ *
+ * Revision 1.10 1996/06/03 09:04:24 adam
+ * Changed a few logf calls.
+ *
+ * Revision 1.9 1996/03/20 13:54:05 adam
+ * The Tcl_File structure is only manipulated in the Tk-event interface
+ * in tkinit.c.
+ *
+ * Revision 1.8 1996/03/05 09:21:20 adam
+ * Bug fix: memory used by GRS records wasn't freed.
+ * Rewrote some of the error handling code - the connection is always
+ * closed before failback is called.
+ * If failback is defined the send APDU methods (init, search, ...) will
+ * return OK but invoke failback (as is the case if the write operation
+ * fails).
+ * Bug fix: ref_count in assoc object could grow if fraction of PDU was
+ * read.
+ *
+ * Revision 1.7 1996/02/19 15:41:55 adam
+ * Better log messages.
+ * Minor improvement of connect method.
+ *
+ * Revision 1.6 1996/02/06 09:22:54 adam
+ * Ported ir-tcl to use beta releases of tcl7.5/tk4.1.
+ *
+ * Revision 1.5 1995/11/28 13:53:40 quinn
+ * Windows port.
+ *
+ * Revision 1.4 1995/10/17 12:18:59 adam
* Bug fix: when target connection closed, the connection was not
* properly reestablished.
*
if (!z_APDU (p->odr_out, &apdu, 0))
{
- Tcl_AppendResult (interp, odr_errlist [odr_geterror (p->odr_out)],
+ Tcl_AppendResult (interp, odr_errmsg (odr_geterror (p->odr_out)),
NULL);
odr_reset (p->odr_out);
return TCL_ERROR;
odr_reset (p->odr_out);
if (p->state == IR_TCL_R_Idle)
{
- logf (LOG_DEBUG, "send_apdu. Sending %s", msg);
+ logf (LOG_DEBUG, "APDU send %s", msg);
if (ir_tcl_send_q (p, p->request_queue, msg) == TCL_ERROR)
{
- sprintf (interp->result, "cs_put failed in %s", msg);
- return TCL_ERROR;
+ if (p->failback)
+ {
+ ir_tcl_disconnect (p);
+ p->failInfo = IR_TCL_FAIL_WRITE;
+ ir_tcl_eval (interp, p->failback);
+ return TCL_OK;
+ }
+ else
+ {
+ sprintf (interp->result, "cs_put failed in %s", msg);
+ return TCL_ERROR;
+ }
}
}
else
- logf (LOG_DEBUG, "send_apdu. Not idle (%s)", msg);
+ logf (LOG_DEBUG, "APDU pending %s", msg);
return TCL_OK;
}
}
else
{
- logf (LOG_DEBUG, "Send %s (%d bytes)", msg, rp->len_out);
+ logf (LOG_DEBUG, "Send %s (%d bytes) fd=%d", msg, rp->len_out,
+ cs_fileno(p->cs_link));
p->state = IR_TCL_R_Waiting;
- free (rp->buf_out);
+ xfree (rp->buf_out);
rp->buf_out = NULL;
}
return TCL_OK;
{
IrTcl_Request *rp, *rp1;
+ p->state = IR_TCL_R_Idle;
for (rp = p->request_queue; rp; rp = rp1)
{
- free (rp->object_name);
- free (rp->callback);
- free (rp->buf_out);
+ xfree (rp->object_name);
+ xfree (rp->callback);
+ xfree (rp->buf_out);
rp1 = rp->next;
- free (rp);
+ xfree (rp);
}
p->request_queue = NULL;
}