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
    • 3f4fece
    • /
    • 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:f2c573f3f527512dd6372d8bf450b8c77522ed82
    directory badge
    swh:1:dir:ac40a315942202dc971527da0ce196b30aaa57b6
    snapshot badge
    swh:1:snp:158a3f36b0bd3da461fb7458de44cfa2c94e4270
    release badge
    swh:1:rel:768dfd8ff182940cf6903371cdbfcde764231226

    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                      fails;
        time_t                          accessed;
        time_t                          checked;
    
        ngx_uint_t                      max_fails;
        time_t                          fail_timeout;
    
        ngx_uint_t                      down;          /* unsigned  down:1; */
    
    #if (NGX_HTTP_SSL)
        void                           *ssl_session;
        int                             ssl_session_len;
    #endif
    
        ngx_http_upstream_rr_peer_t    *next;
    
    #if (NGX_HTTP_UPSTREAM_ZONE)
        ngx_atomic_t                    lock;
    #endif
    };
    
    
    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_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