@@ -520,7 +520,7 @@ static uint64_t upd_price( SolParameters *prm, SolAccountInfo *ka )
520520 // reject if this price corresponds to the same or earlier time
521521 pc_price_info_t * fptr = & pptr -> comp_ [i ].latest_ ;
522522 sysvar_clock_t * sptr = (sysvar_clock_t * )ka [clock_idx ].data ;
523- if ( cptr -> cmd_ == e_cmd_upd_price &&
523+ if ( ( cptr -> cmd_ == e_cmd_upd_price || cptr -> cmd_ == e_cmd_upd_price_no_fail_on_error ) &&
524524 cptr -> pub_slot_ <= fptr -> pub_slot_ ) {
525525 return ERROR_INVALID_ARGUMENT ;
526526 }
@@ -531,7 +531,7 @@ static uint64_t upd_price( SolParameters *prm, SolAccountInfo *ka )
531531 }
532532
533533 // update component price if required
534- if ( cptr -> cmd_ == e_cmd_upd_price ) {
534+ if ( cptr -> cmd_ == e_cmd_upd_price || cptr -> cmd_ == e_cmd_upd_price_no_fail_on_error ) {
535535 fptr -> price_ = cptr -> price_ ;
536536 fptr -> conf_ = cptr -> conf_ ;
537537 fptr -> status_ = cptr -> status_ ;
@@ -540,6 +540,12 @@ static uint64_t upd_price( SolParameters *prm, SolAccountInfo *ka )
540540 return SUCCESS ;
541541}
542542
543+ static uint64_t upd_price_no_fail_on_error ( SolParameters * prm , SolAccountInfo * ka )
544+ {
545+ upd_price ( prm , ka );
546+ return SUCCESS ;
547+ }
548+
543549static uint64_t dispatch ( SolParameters * prm , SolAccountInfo * ka )
544550{
545551 if (prm -> data_len < sizeof (cmd_hdr_t ) ) {
@@ -551,19 +557,20 @@ static uint64_t dispatch( SolParameters *prm, SolAccountInfo *ka )
551557 }
552558 switch (hdr -> cmd_ ) {
553559 case e_cmd_upd_price :
554- case e_cmd_agg_price : return upd_price ( prm , ka );
555- case e_cmd_init_mapping : return init_mapping ( prm , ka );
556- case e_cmd_add_mapping : return add_mapping ( prm , ka );
557- case e_cmd_add_product : return add_product ( prm , ka );
558- case e_cmd_upd_product : return upd_product ( prm , ka );
559- case e_cmd_add_price : return add_price ( prm , ka );
560- case e_cmd_add_publisher : return add_publisher ( prm , ka );
561- case e_cmd_del_publisher : return del_publisher ( prm , ka );
562- case e_cmd_init_price : return init_price ( prm , ka );
563- case e_cmd_init_test : return init_test ( prm , ka );
564- case e_cmd_upd_test : return upd_test ( prm , ka );
565- case e_cmd_set_min_pub : return set_min_pub ( prm , ka );
566- default : return ERROR_INVALID_ARGUMENT ;
560+ case e_cmd_agg_price : return upd_price ( prm , ka );
561+ case e_cmd_upd_price_no_fail_on_error : return upd_price_no_fail_on_error ( prm , ka );
562+ case e_cmd_init_mapping : return init_mapping ( prm , ka );
563+ case e_cmd_add_mapping : return add_mapping ( prm , ka );
564+ case e_cmd_add_product : return add_product ( prm , ka );
565+ case e_cmd_upd_product : return upd_product ( prm , ka );
566+ case e_cmd_add_price : return add_price ( prm , ka );
567+ case e_cmd_add_publisher : return add_publisher ( prm , ka );
568+ case e_cmd_del_publisher : return del_publisher ( prm , ka );
569+ case e_cmd_init_price : return init_price ( prm , ka );
570+ case e_cmd_init_test : return init_test ( prm , ka );
571+ case e_cmd_upd_test : return upd_test ( prm , ka );
572+ case e_cmd_set_min_pub : return set_min_pub ( prm , ka );
573+ default : return ERROR_INVALID_ARGUMENT ;
567574 }
568575}
569576
0 commit comments