/* * Copyright (c) 2002, 2003 Sendmail, Inc. and its suppliers. * All rights reserved. * * By using this file, you agree to the terms and conditions set * forth in the LICENSE file which can be found at the top level of * the sendmail distribution. */ #include "sm/generic.h" SM_RCSID("@(#)$Id: cstrfree.c,v 1.11 2006/10/05 04:27:37 ca Exp $") #include "sm/assert.h" #include "sm/magic.h" #include "sm/heap.h" #include "sm/limits.h" #include "sm/cstr.h" /* ** SM_CSTR_FREE -- Frees a cstring ** ** Parameters: ** cstr -- cstring to free ** ** Returns: ** none. */ void sm_cstr_free(sm_cstr_P cstr) { SM_IS_CSTR(cstr); SM_CSTR_LOCK(cstr); SM_ASSERT(cstr->sm_cstr_refcnt > 0); if (--cstr->sm_cstr_refcnt > 0) { SM_CSTR_UNLOCK(cstr); return; } SM_CSTR_UNLOCK(cstr); if (cstr->sm_cstr_base != NULL) sm_free_size(cstr->sm_cstr_base, cstr->sm_cstr_len); #if MTA_USE_PTHREADS pthread_mutex_destroy(&cstr->sm_cstr_mutex); #endif sm_free_size(cstr, sizeof(*cstr)); }