.\"
.\" Copyright 2012-2013 Samy Al Bahra.
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\"
.Dd September 2, 2012
.Dt CK_EPOCH_RECYCLE 3
.Sh NAME
.Nm ck_epoch_recycle
.Nd return an epoch record that may be used by caller
.Sh LIBRARY
Concurrency Kit (libck, \-lck)
.Sh SYNOPSIS
.In ck_epoch.h
.Ft ck_epoch_record_t *
.Fn ck_epoch_recycle "ck_epoch_t *epoch"
.Sh DESCRIPTION
The
.Fn ck_epoch_recycle 3
function attempts to return an unused epoch record object for use by
the caller. These epoch records were associated with previous calls
to the
.Fn ck_epoch_unregister 3
function.
.Sh EXAMPLE
.Bd -literal -offset indent
#include <ck_epoch.h>
#include <stdlib.h>

/*
 * epoch was previously initialized with ck_epoch_init.
 */
ck_epoch_t *epoch;

void
function(void)
{
	ck_epoch_record_t *record;

	record = ck_epoch_recycle(&epoch);
	if (record == NULL) {
		record = malloc(sizeof *record);
		if (record == NULL)
			return;

		ck_epoch_register(&epoch, record);
	}

	/*
	 * After we are done, we will unregister the record so it
	 * can be used by other new participants in the epoch system
	 * provided by the object pointed to by "epoch".
	 */
	ck_epoch_unregister(&epoch, record);
	return;
}
.Ed
.Sh RETURN VALUES
This function returns a pointer to a
.Dv ck_epoch_record_t
object. If no unused record was found to be associated with the
object pointed to by
.Fa epoch ,
then the function will return NULL.
.Sh ERRORS
Behavior is undefined if the object pointed to by
.Fa epoch
is not a valid epoch object.
.Sh SEE ALSO
.Xr ck_epoch_init 3 ,
.Xr ck_epoch_register 3 ,
.Xr ck_epoch_unregister 3 ,
.Xr ck_epoch_poll 3 ,
.Xr ck_epoch_synchronize 3 ,
.Xr ck_epoch_reclaim 3 ,
.Xr ck_epoch_barrier 3 ,
.Xr ck_epoch_call 3 ,
.Xr ck_epoch_begin 3 ,
.Xr ck_epoch_end 3
.Pp
Additional information available at http://concurrencykit.org/
