Skip to content

Commit

Permalink
dbAddr::compare
Browse files Browse the repository at this point in the history
  • Loading branch information
mdavidsaver committed Apr 8, 2021
1 parent 89a253e commit 905c5e6
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 8 deletions.
12 changes: 5 additions & 7 deletions modules/database/src/ioc/db/dbAccess.c
Expand Up @@ -623,6 +623,7 @@ long dbProcess(dbCommon *precord)

long dbEntryToAddr(const DBENTRY *pdbentry, DBADDR *paddr)
{
long ret = 0;
dbFldDes *pflddes = pdbentry->pflddes;
short dbfType = pflddes->field_type;

Expand All @@ -640,10 +641,11 @@ long dbEntryToAddr(const DBENTRY *pdbentry, DBADDR *paddr)

/* Let record type modify paddr */
if (prset && prset->cvt_dbaddr) {
return prset->cvt_dbaddr(paddr);
ret = prset->cvt_dbaddr(paddr);
}
}
return 0;
paddr->compare = paddr->pfield;
return ret;
}

/*
Expand Down Expand Up @@ -911,7 +913,6 @@ long dbGet(DBADDR *paddr, short dbrType,
void *pbuffer, long *options, long *nRequest, void *pflin)
{
char *pbuf = pbuffer;
void *pfieldsave = paddr->pfield;
db_field_log *pfl = (db_field_log *)pflin;
short field_type;
long capacity, no_elements, offset;
Expand Down Expand Up @@ -1044,7 +1045,6 @@ long dbGet(DBADDR *paddr, short dbrType,
}
}
done:
paddr->pfield = pfieldsave;
return status;
}

Expand Down Expand Up @@ -1322,7 +1322,6 @@ long dbPut(DBADDR *paddr, short dbrType,
short field_type = paddr->field_type;
long no_elements = paddr->no_elements;
long special = paddr->special;
void *pfieldsave = paddr->pfield;
rset *prset = dbGetRset(paddr);
long status = 0;
long offset;
Expand Down Expand Up @@ -1387,14 +1386,13 @@ long dbPut(DBADDR *paddr, short dbrType,
if (isValueField) precord->udf = FALSE;
if (precord->mlis.count &&
!(isValueField && pfldDes->process_passive))
db_post_events(precord, pfieldsave, DBE_VALUE | DBE_LOG);
db_post_events(precord, paddr->compare, DBE_VALUE | DBE_LOG);
/* If this field is a property (metadata) field,
* then post a property change event (even if the field
* didn't change).
*/
if (precord->mlis.count && pfldDes->prop)
db_post_events(precord, NULL, DBE_PROPERTY);
done:
paddr->pfield = pfieldsave;
return status;
}
1 change: 1 addition & 0 deletions modules/database/src/ioc/db/dbAddr.h
Expand Up @@ -17,6 +17,7 @@ struct dbFldDes;
typedef struct dbAddr {
struct dbCommon *precord; /* address of record */
void *pfield; /* address of field */
void *compare; /* use only for equality/order test between instances */
struct dbFldDes *pfldDes; /* address of struct fldDes */
long no_elements; /* number of elements (arrays) */
short field_type; /* type of database field */
Expand Down
2 changes: 1 addition & 1 deletion modules/database/src/ioc/db/dbEvent.c
Expand Up @@ -851,7 +851,7 @@ unsigned int caEventMask
* Only send event msg if they are waiting on the field which
* changed or pval==NULL, and are waiting on matching event
*/
if ( (dbChannelField(pevent->chan) == (void *)pField || pField==NULL) &&
if ( (pevent->chan->addr.compare == (void *)pField || pField==NULL) &&
(caEventMask & pevent->select)) {
db_field_log *pLog = db_create_event_log(pevent);
pLog = dbChannelRunPreChain(pevent->chan, pLog);
Expand Down

0 comments on commit 905c5e6

Please sign in to comment.