
/*
 * Copyright (C) Igor Sysoev
 */


#ifndef _NGX_HTTP_BUSY_LOCK_H_INCLUDED_
#define _NGX_HTTP_BUSY_LOCK_H_INCLUDED_


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


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

    int                 busy;
    int                 max_busy;

    int                 waiting;
    int                 max_waiting;

    time_t              timeout;

    ngx_event_mutex_t  *mutex;
} ngx_http_busy_lock_t;


typedef struct {
    time_t         time;
    ngx_event_t   *event;
    void         (*event_handler)(ngx_event_t *ev);
    u_char        *md5;
    int            slot;
} ngx_http_busy_lock_ctx_t;


int ngx_http_busy_lock(ngx_http_busy_lock_t *bl, ngx_http_busy_lock_ctx_t *bc);
int ngx_http_busy_lock_cachable(ngx_http_busy_lock_t *bl,
                                ngx_http_busy_lock_ctx_t *bc, int lock);
void ngx_http_busy_unlock(ngx_http_busy_lock_t *bl,
                          ngx_http_busy_lock_ctx_t *bc);

char *ngx_http_set_busy_lock_slot(ngx_conf_t *cf, ngx_command_t *cmd,
                                  void *conf);


#endif /* _NGX_HTTP_BUSY_LOCK_H_INCLUDED_ */
