
/*
 * Copyright (C) Igor Sysoev
 */


#ifndef _NGX_EVENT_BUSY_LOCK_H_INCLUDED_
#define _NGX_EVENT_BUSY_LOCK_H_INCLUDED_


#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>

typedef struct ngx_event_busy_lock_ctx_s  ngx_event_busy_lock_ctx_t;

struct ngx_event_busy_lock_ctx_s {
    ngx_event_t                *event;
    ngx_event_handler_pt        handler;
    void                       *data;
    ngx_msec_t                  timer;

    unsigned                    locked:1;
    unsigned                    waiting:1;
    unsigned                    cache_updated:1;

    char                       *md5;
    ngx_int_t                   slot;

    ngx_event_busy_lock_ctx_t  *next;
};


typedef struct {
    u_char                     *md5_mask;
    char                       *md5;
    ngx_uint_t                  cachable;

    ngx_uint_t                  busy;
    ngx_uint_t                  max_busy;

    ngx_uint_t                  waiting;
    ngx_uint_t                  max_waiting;

    ngx_event_busy_lock_ctx_t  *events;
    ngx_event_busy_lock_ctx_t  *last;

#if (NGX_THREADS)
    ngx_mutex_t                *mutex;
#endif
} ngx_event_busy_lock_t;


ngx_int_t ngx_event_busy_lock(ngx_event_busy_lock_t *bl,
    ngx_event_busy_lock_ctx_t *ctx);
ngx_int_t ngx_event_busy_lock_cachable(ngx_event_busy_lock_t *bl,
    ngx_event_busy_lock_ctx_t *ctx);
void ngx_event_busy_unlock(ngx_event_busy_lock_t *bl,
    ngx_event_busy_lock_ctx_t *ctx);
void ngx_event_busy_lock_cancel(ngx_event_busy_lock_t *bl,
    ngx_event_busy_lock_ctx_t *ctx);


#endif /* _NGX_EVENT_BUSY_LOCK_H_INCLUDED_ */
