bool ArrayData::equal(const ArrayData *v2, bool strict) const { assert(v2); if (this == v2) return true; auto const count1 = size(); auto const count2 = v2->size(); if (count1 != count2) return false; if (count1 == 0) return true; // prevent circular referenced objects/arrays or deep ones DECLARE_THREAD_INFO; check_recursion(info); if (strict) { for (ArrayIter iter1(this), iter2(v2); iter1; ++iter1, ++iter2) { assert(iter2); if (!same(iter1.first(), iter2.first()) || !same(iter1.second(), iter2.secondRef())) return false; } } else { for (ArrayIter iter(this); iter; ++iter) { Variant key(iter.first()); if (!v2->exists(key)) return false; if (!tvEqual(*iter.second().asTypedValue(), *v2->get(key).asTypedValue())) { return false; } } } return true; }
int pq_clss_setfrom( pqueue* pq, prod_class_t *clssp) /* modified upon return */ { timestampt ts = clssp->from; int status = pq_last(pq, clssp, &ts); if(status == ENOERR) { if(tvEqual(ts, clssp->from)) status = PQUEUE_END; else clssp->from = ts; } return status; }
/* * called at exit */ static void cleanup(void) { log_notice("Exiting"); if (done) { /* * We are not in the interrupt context, so these can be performed * safely. */ fl_closeAll(); if (pq) (void)pq_close(pq); if (!tvEqual(palt_last_insertion, TS_ZERO)) { timestampt now; (void)set_timestamp(&now); log_notice("Behind by %g s", d_diff_timestamp(&now, &palt_last_insertion)); if (stateWrite(&palt_last_insertion) < 0) { log_error("Couldn't save insertion-time of last processed " "data-product"); } } while (reap(-1, WNOHANG) > 0) /*EMPTY*/; } if(shmid != -1) { log_notice("Deleting shared segment."); shmctl(shmid, IPC_RMID, NULL); } if(semid != -1) { semctl(semid, 0, IPC_RMID); } log_fini(); }