smb_sa_handle
static smb_sa_handle_t smb_sa_handle;
(void) mutex_lock(&smb_sa_handle.sa_mtx);
smb_sa_handle.sa_in_service = B_TRUE;
(void) mutex_unlock(&smb_sa_handle.sa_mtx);
(void) mutex_lock(&smb_sa_handle.sa_mtx);
smb_sa_handle.sa_in_service = B_FALSE;
if (smb_sa_handle.sa_handle != NULL) {
sa_fini(smb_sa_handle.sa_handle);
smb_sa_handle.sa_handle = NULL;
(void) mutex_unlock(&smb_sa_handle.sa_mtx);
(void) mutex_lock(&smb_sa_handle.sa_mtx);
if (!smb_sa_handle.sa_in_service) {
(void) mutex_unlock(&smb_sa_handle.sa_mtx);
if (smb_sa_handle.sa_handle != NULL &&
sa_needs_refresh(smb_sa_handle.sa_handle)) {
sa_fini(smb_sa_handle.sa_handle);
smb_sa_handle.sa_handle = NULL;
if (smb_sa_handle.sa_handle == NULL) {
smb_sa_handle.sa_handle = sa_init(SA_INIT_SHARE_API);
if (smb_sa_handle.sa_handle == NULL) {
(void) mutex_unlock(&smb_sa_handle.sa_mtx);
return (smb_sa_handle.sa_handle);
(void) mutex_unlock(&smb_sa_handle.sa_mtx);