On Monday 15 February 2010 10:53:56 [email protected] wrote:
>
> In a recent exchange between Dirk and us about streamDevice, Dirk
> pointed out one way in which stringout is different to other base output
> records - it won't call device support if UDF is true.
>
> Is this deliberate or a bug? If it is a bug, should we fix it because it
> will result in a behaviour change?
There is a bug there, but the idea that the other record types always call
device support even with UDF true is not quite right; they don't directly
check UDF in process, but have checkAlarms() set prec->nsev to INVALID_ALARM
when UDF is true and make the record's behaviour in the presence of an
INVALID_ALARM depend on the setting of prec->ivoa.
> I can see a viable argument that the opposite should be true - device
> support shouldn't be called if UDF is true. A third alternative is that
> the decision should be deferred to device support.
I think the other records have it right, what should happen is controlled by
the database designer using IVOA. In the case of stringout though, I think
the 'goto finish' line needs to be deleted to allow the IVOA mechanism (which
is already present in the process() routine) to work properly.
> I know stringout is different to other standard output records because
> constant links can't be strings, because strings resolve as db or CA
> links. The workaround is to put the string into VAL and make OMSL
> supervisory. This should actually solve our problem (because UDF won't
> be true anymore), but I was wondering whether there was any reasoning
> behind the current implementation.
Not that I can think of, and looking at the history it got changed to this by
Marty back in 1996 when an even worse bug in it was fixed.
If there are no objections I propose to apply the following patch:
=== modified file 'src/rec/stringoutRecord.c'
--- src/rec/stringoutRecord.c 2009-07-08 18:14:11 +0000
+++ src/rec/stringoutRecord.c 2010-02-15 17:57:30 +0000
@@ -145,7 +145,6 @@
if(prec->udf == TRUE ){
recGblSetSevr(prec,UDF_ALARM,INVALID_ALARM);
- goto finish;
}
if (prec->nsev < INVALID_ALARM )
@@ -172,7 +171,7 @@
/* check if device support set pact */
if ( !pact && prec->pact ) return(0);
-finish:
+
prec->pact = TRUE;
recGblGetTimeStamp(prec);
monitor(prec);
- Andrew
--
The best FOSS code is written to be read by other humans -- Harald Welte
- References:
- FW: StreamDevice bug nick.rees
- Navigate by Date:
- Prev:
FW: StreamDevice bug nick.rees
- Next:
dbToRecordTypeH Benjamin Franksen
- Index:
2002
2003
2004
2005
2006
2007
2008
2009
<2010>
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
FW: StreamDevice bug nick.rees
- Next:
dbToRecordTypeH Benjamin Franksen
- Index:
2002
2003
2004
2005
2006
2007
2008
2009
<2010>
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
|