}
int edg_wll_TransNeedRetry(edg_wll_Context ctx) {
- // XXX: needs flesh
+ int ret;
+ char *errd;
+
+ ret = edg_wll_Error(ctx,NULL,NULL);
+ if (ret == EDG_WLL_ERROR_DB_TRANS_DEADLOCK) {
+ edg_wll_Rollback(ctx);
+ return 1;
+ } else if (ret==0) {
+ edg_wll_Commit(ctx); /* errors propagated further */
+ return 0;
+ } else {
+ edg_wll_Error(ctx, NULL, &errd);
+ edg_wll_Rollback(ctx);
+ edg_wll_SetError(ctx, ret, errd);
+ free(errd);
+ return 0;
+ }
}
reject_fd = -1,
readret, i, ret;
size_t maxsize;
- char *line = NULL,
+ char *line = NULL, *errdesc,
buff[30];
edg_wll_Event *event;
edg_wlc_JobId jobid = NULL;
do {
if (edg_wll_Transaction(ctx)) goto err;
- ret = edg_wll_StoreEvent(ctx, event, line, NULL);
+ edg_wll_StoreEvent(ctx, event, line, NULL);
} while (edg_wll_TransNeedRetry(ctx));
- if (ret) {
- char *errdesc;
+ if ((ret = edg_wll_Error(ctx, NULL, &errdesc)) != 0) {
int len = strlen(line),
total = 0,
written;
- edg_wll_Error(ctx, NULL, &errdesc);
fprintf(stderr, "Can't store event: %s\n", errdesc);
if ( reject_fd == -1 )
{