cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence/*
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Copyright (C) 1999-2001, 2004, 2007, 2016 Internet Systems Consortium, Inc. ("ISC")
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence *
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * This Source Code Form is subject to the terms of the Mozilla Public
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * License, v. 2.0. If a copy of the MPL was not distributed with this
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * file, You can obtain one at http://mozilla.org/MPL/2.0/.
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence */
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
70e5a7403f0e0a3bd292b8287c5fed5772c15270Automatic Updater/* $Id: once.h,v 1.9 2007/06/19 23:47:20 tbox Exp $ */
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence#ifndef ISC_ONCE_H
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence#define ISC_ONCE_H 1
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence#include <isc/lang.h>
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence#include <isc/result.h>
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David LawrenceISC_LANG_BEGINDECLS
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrencetypedef struct {
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence int status;
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence int counter;
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence} isc_once_t;
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence#define ISC_ONCE_INIT_NEEDED 0
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence#define ISC_ONCE_INIT_DONE 1
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence#define ISC_ONCE_INIT { ISC_ONCE_INIT_NEEDED, 1 }
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrenceisc_result_t
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrenceisc_once_do(isc_once_t *controller, void(*function)(void));
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David LawrenceISC_LANG_ENDDECLS
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence#endif /* ISC_ONCE_H */