Skip to main content
  • Home
  • Development
  • Documentation
  • Donate
  • Operational login
  • Browse the archive

swh logo
SoftwareHeritage
Software
Heritage
Archive
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

swh:1:snp:158a3f36b0bd3da461fb7458de44cfa2c94e4270
  • Code
  • Branches (0)
  • Releases (20)
    • Branches
    • Releases
      • 1.18.0-6ubuntu14.1
      • 1.18.0-6ubuntu14
      • 1.18.0-6ubuntu11.1
      • 1.18.0-6ubuntu11
      • 1.18.0-6ubuntu8.2
      • 1.18.0-6ubuntu8
      • 1.18.0-0ubuntu1.3
      • 1.17.10-0ubuntu1
      • 1.14.0-0ubuntu1.10
      • 1.10.3-0ubuntu0.16.04.5
      • 1.9.15-0ubuntu1
      • 1.4.6-1ubuntu3.9
      • 1.4.6-1ubuntu3
    • 756ae7d
    • /
    • src
    • /
    • http
    • /
    • ngx_http_upstream_round_robin.h
    Raw File Download

    To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
    Select below a type of object currently browsed in order to display its associated SWHID and permalink.

    • content
    • directory
    • snapshot
    • release
    content badge
    swh:1:cnt:45f258d2841a5ceddc12f6d7ced5960e4b11418e
    directory badge
    swh:1:dir:a8b0fbff6b961bb56f3a2c42716ce6eb71e0012a
    snapshot badge
    swh:1:snp:158a3f36b0bd3da461fb7458de44cfa2c94e4270
    release badge
    swh:1:rel:401e905664c6d59053bd57e026ddb1b21524a156

    This interface enables to generate software citations, provided that the root directory of browsed objects contains a citation.cff or codemeta.json file.
    Select below a type of object currently browsed in order to generate citations for them.

    • content
    • directory
    • snapshot
    • release
    Generate software citation in BibTex format (requires biblatex-software package)
    Generating citation ...
    Generate software citation in BibTex format (requires biblatex-software package)
    Generating citation ...
    Generate software citation in BibTex format (requires biblatex-software package)
    Generating citation ...
    Generate software citation in BibTex format (requires biblatex-software package)
    Generating citation ...
    ngx_http_upstream_round_robin.h
    
    /*
     * Copyright (C) Igor Sysoev
     * Copyright (C) Nginx, Inc.
     */
    
    
    #ifndef _NGX_HTTP_UPSTREAM_ROUND_ROBIN_H_INCLUDED_
    #define _NGX_HTTP_UPSTREAM_ROUND_ROBIN_H_INCLUDED_
    
    
    #include <ngx_config.h>
    #include <ngx_core.h>
    #include <ngx_http.h>
    
    
    typedef struct ngx_http_upstream_rr_peer_s   ngx_http_upstream_rr_peer_t;
    
    struct ngx_http_upstream_rr_peer_s {
        struct sockaddr                *sockaddr;
        socklen_t                       socklen;
        ngx_str_t                       name;
        ngx_str_t                       server;
    
        ngx_int_t                       current_weight;
        ngx_int_t                       effective_weight;
        ngx_int_t                       weight;
    
        ngx_uint_t                      conns;
        ngx_uint_t                      max_conns;
    
        ngx_uint_t                      fails;
        time_t                          accessed;
        time_t                          checked;
    
        ngx_uint_t                      max_fails;
        time_t                          fail_timeout;
        ngx_msec_t                      slow_start;
        ngx_msec_t                      start_time;
    
        ngx_uint_t                      down;
    
    #if (NGX_HTTP_SSL || NGX_COMPAT)
        void                           *ssl_session;
        int                             ssl_session_len;
    #endif
    
    #if (NGX_HTTP_UPSTREAM_ZONE)
        ngx_atomic_t                    lock;
    #endif
    
        ngx_http_upstream_rr_peer_t    *next;
    
        NGX_COMPAT_BEGIN(32)
        NGX_COMPAT_END
    };
    
    
    typedef struct ngx_http_upstream_rr_peers_s  ngx_http_upstream_rr_peers_t;
    
    struct ngx_http_upstream_rr_peers_s {
        ngx_uint_t                      number;
    
    #if (NGX_HTTP_UPSTREAM_ZONE)
        ngx_slab_pool_t                *shpool;
        ngx_atomic_t                    rwlock;
        ngx_http_upstream_rr_peers_t   *zone_next;
    #endif
    
        ngx_uint_t                      total_weight;
    
        unsigned                        single:1;
        unsigned                        weighted:1;
    
        ngx_str_t                      *name;
    
        ngx_http_upstream_rr_peers_t   *next;
    
        ngx_http_upstream_rr_peer_t    *peer;
    };
    
    
    #if (NGX_HTTP_UPSTREAM_ZONE)
    
    #define ngx_http_upstream_rr_peers_rlock(peers)                               \
                                                                                  \
        if (peers->shpool) {                                                      \
            ngx_rwlock_rlock(&peers->rwlock);                                     \
        }
    
    #define ngx_http_upstream_rr_peers_wlock(peers)                               \
                                                                                  \
        if (peers->shpool) {                                                      \
            ngx_rwlock_wlock(&peers->rwlock);                                     \
        }
    
    #define ngx_http_upstream_rr_peers_unlock(peers)                              \
                                                                                  \
        if (peers->shpool) {                                                      \
            ngx_rwlock_unlock(&peers->rwlock);                                    \
        }
    
    
    #define ngx_http_upstream_rr_peer_lock(peers, peer)                           \
                                                                                  \
        if (peers->shpool) {                                                      \
            ngx_rwlock_wlock(&peer->lock);                                        \
        }
    
    #define ngx_http_upstream_rr_peer_unlock(peers, peer)                         \
                                                                                  \
        if (peers->shpool) {                                                      \
            ngx_rwlock_unlock(&peer->lock);                                       \
        }
    
    #else
    
    #define ngx_http_upstream_rr_peers_rlock(peers)
    #define ngx_http_upstream_rr_peers_wlock(peers)
    #define ngx_http_upstream_rr_peers_unlock(peers)
    #define ngx_http_upstream_rr_peer_lock(peers, peer)
    #define ngx_http_upstream_rr_peer_unlock(peers, peer)
    
    #endif
    
    
    typedef struct {
        ngx_uint_t                      config;
        ngx_http_upstream_rr_peers_t   *peers;
        ngx_http_upstream_rr_peer_t    *current;
        uintptr_t                      *tried;
        uintptr_t                       data;
    } ngx_http_upstream_rr_peer_data_t;
    
    
    ngx_int_t ngx_http_upstream_init_round_robin(ngx_conf_t *cf,
        ngx_http_upstream_srv_conf_t *us);
    ngx_int_t ngx_http_upstream_init_round_robin_peer(ngx_http_request_t *r,
        ngx_http_upstream_srv_conf_t *us);
    ngx_int_t ngx_http_upstream_create_round_robin_peer(ngx_http_request_t *r,
        ngx_http_upstream_resolved_t *ur);
    ngx_int_t ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc,
        void *data);
    void ngx_http_upstream_free_round_robin_peer(ngx_peer_connection_t *pc,
        void *data, ngx_uint_t state);
    
    #if (NGX_HTTP_SSL)
    ngx_int_t
        ngx_http_upstream_set_round_robin_peer_session(ngx_peer_connection_t *pc,
        void *data);
    void ngx_http_upstream_save_round_robin_peer_session(ngx_peer_connection_t *pc,
        void *data);
    #endif
    
    
    #endif /* _NGX_HTTP_UPSTREAM_ROUND_ROBIN_H_INCLUDED_ */
    

    back to top

    Software Heritage — Copyright (C) 2015–2026, The Software Heritage developers. License: GNU AGPLv3+.
    The source code of Software Heritage itself is available on our development forge.
    The source code files archived by Software Heritage are available under their own copyright and licenses.
    Terms of use: Archive access, API— Content policy— Contact— JavaScript license information— Web API