- Fixed a normalisation problem in diffscan when the first value
did not have enough counts - Reduced polling frequency in emon - Fixed a scriptcontext bug which would cause it to dump core in SctTransact on interrupts - Fixed an issue with missing <nl> at the end of batch files - Added a feature which does not call halt when counting stops in hmcontrol.c This is necessary for the BOA CCD - Initalized doNotFree properly in hipadaba.c - Added the travelling salesman reflection measurement algorithm - Added another component to amorset - Removed old SicsWait from nserver.c - Added a means to nxscript to write 16 bit data for BOA - Modified tasub to accept a drivabel as a motor and not only a motor. This became necessary to make EIGER work as A2 on EIGER is a virtual motor SKIPPED: psi/amorcomp.h psi/amordrive.h psi/amorset.c psi/amorset.h psi/amorset.tex psi/amorset.w psi/el734hp.c psi/el737hpdriv.c psi/make_gen psi/pardef.c psi/polterwrite.c psi/psi.c psi/sinqhttpopt.c
This commit is contained in:
@@ -1174,20 +1174,21 @@ static char *TransactionHandler(void *actionData, char *lastReply,
|
||||
return st->command;
|
||||
} else {
|
||||
st->sent = 2;
|
||||
/*
|
||||
if (st->controller->verbose) {
|
||||
SCPrintf(st->con, eLog, "%6.3f reply : %s", secondsOfMinute(), lastReply);
|
||||
}
|
||||
if (st->controller->fd != NULL) {
|
||||
fprintf(st->controller->fd,"%6.3f reply : %s\n", secondsOfMinute(), lastReply);
|
||||
}
|
||||
*/
|
||||
/* printf("Transact: %s got %s\n", st->command, lastReply); */
|
||||
if(st->controller != NULL){
|
||||
if(st->controller != NULL){
|
||||
traceIO(st->controller->node->name, "transreply:%s", lastReply);
|
||||
} else {
|
||||
traceIO("sctunknown", "transreply:%s", lastReply);
|
||||
}
|
||||
|
||||
st->reply = strdup(lastReply);
|
||||
st->reply = strdup(lastReply);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@@ -1218,14 +1219,24 @@ static int SctTransactCmd(pSICSOBJ ccmd, SConnection * con,
|
||||
st->con = SCCopyConnection(con);
|
||||
st->command = strdup(par[0]->value.v.text);
|
||||
st->controller = c;
|
||||
st->sent = 0;
|
||||
|
||||
DevQueue(c->devser, st, WritePRIO,
|
||||
TransactionHandler, SctTransactMatch, NULL, NULL);
|
||||
while (st->sent != 2) {
|
||||
TaskYield(pServ->pTasker);
|
||||
/*
|
||||
* This is definitly shit: it will free the st pointer,
|
||||
* which makes memory corruption when the queued task finally
|
||||
* runs. I have commented it out for now. See if this test
|
||||
* is needed at all. Other options include:
|
||||
* - dequeuing the transaction from the DevQueue
|
||||
* - writing an error message and return. This causes a little
|
||||
* memory leak but as interrupts are not frequent this may be OK
|
||||
if (SCGetInterrupt(con) != eContinue) {
|
||||
break;
|
||||
break;
|
||||
}
|
||||
*/
|
||||
}
|
||||
if (st->reply != NULL) {
|
||||
SCWrite(con,st->reply,eValue);
|
||||
|
||||
Reference in New Issue
Block a user