- yaz_log(log_level, "zebra_lock_destroy fd=%d p=%p fname=%s", h->fd, h, h->fname);
- if (h->fd != -1)
- close (h->fd);
- xfree (h->fname);
- xfree (h);
+ yaz_log(log_level, "zebra_lock_destroy fd=%d p=%p fname=%s",
+ h->p->fd, h, h->p->fname);
+ zebra_mutex_lock(&lock_list_mutex);
+ yaz_log(log_level, "zebra_lock_destroy fd=%d p=%p fname=%s 1",
+ h->p->fd, h, h->p->fname);
+ assert(h->p->ref_count > 0);
+ --(h->p->ref_count);
+ if (h->p->ref_count == 0)
+ {
+ struct zebra_lock_info **hp = &lock_list;
+ while (*hp)
+ {
+ if (*hp == h->p)
+ {
+ *hp = h->p->next;
+ break;
+ }
+ else
+ hp = &(*hp)->next;
+ }
+#ifndef WIN32
+ zebra_lock_rdwr_destroy(&h->p->rdwr_lock);
+ zebra_mutex_destroy(&h->p->file_mutex);
+#endif
+ if (h->p->fd != -1)
+ close(h->p->fd);
+ xfree(h->p->fname);
+ xfree(h->p);
+ }
+ xfree(h);
+ zebra_mutex_unlock(&lock_list_mutex);