-void AdjRefCount(long msgnum, int incr)
-{
- struct arcq new_arcq;
- int rv = 0;
-
- syslog(LOG_DEBUG, "msgbase: AdjRefCount() msg %ld ref count delta %+d", msgnum, incr);
-
- begin_critical_section(S_SUPPMSGMAIN);
- if (arcfp == NULL) {
- arcfp = fopen(file_arcq, "ab+");
- chown(file_arcq, CTDLUID, (-1));
- chmod(file_arcq, 0600);
- }
- end_critical_section(S_SUPPMSGMAIN);
-
- /* msgnum < 0 means that we're trying to close the file */
- if (msgnum < 0) {
- syslog(LOG_DEBUG, "msgbase: closing the AdjRefCount queue file");
- begin_critical_section(S_SUPPMSGMAIN);
- if (arcfp != NULL) {
- fclose(arcfp);
- arcfp = NULL;
- }
- end_critical_section(S_SUPPMSGMAIN);
- return;
- }
-
- /*
- * If we can't open the queue, perform the operation synchronously.
- */
- if (arcfp == NULL) {
- TDAP_AdjRefCount(msgnum, incr);
- return;
- }
-
- new_arcq.arcq_msgnum = msgnum;
- new_arcq.arcq_delta = incr;
- rv = fwrite(&new_arcq, sizeof(struct arcq), 1, arcfp);
- if (rv == -1) {
- syslog(LOG_EMERG, "%s: %m", file_arcq);
- }
- fflush(arcfp);
-
- return;
-}
-
-