Coverage Report

Created: 2025-09-27 06:26

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/php-src/ext/opcache/zend_accelerator_hash.h
Line
Count
Source
1
/*
2
   +----------------------------------------------------------------------+
3
   | Zend OPcache                                                         |
4
   +----------------------------------------------------------------------+
5
   | Copyright (c) The PHP Group                                          |
6
   +----------------------------------------------------------------------+
7
   | This source file is subject to version 3.01 of the PHP license,      |
8
   | that is bundled with this package in the file LICENSE, and is        |
9
   | available through the world-wide-web at the following url:           |
10
   | https://www.php.net/license/3_01.txt                                 |
11
   | If you did not receive a copy of the PHP license and are unable to   |
12
   | obtain it through the world-wide-web, please send a note to          |
13
   | license@php.net so we can mail you a copy immediately.               |
14
   +----------------------------------------------------------------------+
15
   | Authors: Andi Gutmans <andi@php.net>                                 |
16
   |          Zeev Suraski <zeev@php.net>                                 |
17
   |          Stanislav Malyshev <stas@zend.com>                          |
18
   |          Dmitry Stogov <dmitry@php.net>                              |
19
   +----------------------------------------------------------------------+
20
*/
21
22
#ifndef ZEND_ACCELERATOR_HASH_H
23
#define ZEND_ACCELERATOR_HASH_H
24
25
#include "zend.h"
26
27
/*
28
  zend_accel_hash - is a hash table allocated in shared memory and
29
  distributed across simultaneously running processes. The hash tables have
30
  fixed sizen selected during construction by zend_accel_hash_init(). All the
31
  hash entries are preallocated in the 'hash_entries' array. 'num_entries' is
32
  initialized by zero and grows when new data is added.
33
  zend_accel_hash_update() just takes the next entry from 'hash_entries'
34
  array and puts it into appropriate place of 'hash_table'.
35
  Hash collisions are resolved by separate chaining with linked lists,
36
  however, entries are still taken from the same 'hash_entries' array.
37
  'key' and 'data' passed to zend_accel_hash_update() must be already
38
  allocated in shared memory. Few keys may be resolved to the same data.
39
  using 'indirect' entries, that point to other entries ('data' is actually
40
  a pointer to another zend_accel_hash_entry).
41
  zend_accel_hash_update() requires exclusive lock, however,
42
  zend_accel_hash_find() does not.
43
*/
44
45
typedef struct _zend_accel_hash_entry zend_accel_hash_entry;
46
47
struct _zend_accel_hash_entry {
48
  zend_ulong             hash_value;
49
  zend_string           *key;
50
  zend_accel_hash_entry *next;
51
  void                  *data;
52
  bool                   indirect;
53
};
54
55
typedef struct _zend_accel_hash {
56
  zend_accel_hash_entry **hash_table;
57
  zend_accel_hash_entry  *hash_entries;
58
  uint32_t               num_entries;
59
  uint32_t               max_num_entries;
60
  uint32_t               num_direct_entries;
61
} zend_accel_hash;
62
63
BEGIN_EXTERN_C()
64
65
void zend_accel_hash_init(zend_accel_hash *accel_hash, uint32_t hash_size);
66
void zend_accel_hash_clean(zend_accel_hash *accel_hash);
67
68
zend_accel_hash_entry* zend_accel_hash_update(
69
    zend_accel_hash        *accel_hash,
70
    zend_string            *key,
71
    bool                   indirect,
72
    void                   *data);
73
74
void* zend_accel_hash_find(
75
    zend_accel_hash        *accel_hash,
76
    zend_string            *key);
77
78
zend_accel_hash_entry* zend_accel_hash_find_entry(
79
    zend_accel_hash        *accel_hash,
80
    zend_string            *key);
81
82
int zend_accel_hash_unlink(
83
    zend_accel_hash        *accel_hash,
84
    zend_string            *key);
85
86
static inline bool zend_accel_hash_is_full(zend_accel_hash *accel_hash)
87
60.4k
{
88
60.4k
  if (accel_hash->num_entries == accel_hash->max_num_entries) {
89
0
    return true;
90
60.4k
  } else {
91
    return false;
92
60.4k
  }
93
60.4k
}
Unexecuted instantiation: shared_alloc_mmap.c:zend_accel_hash_is_full
Unexecuted instantiation: shared_alloc_posix.c:zend_accel_hash_is_full
Unexecuted instantiation: shared_alloc_shm.c:zend_accel_hash_is_full
Unexecuted instantiation: zend_accelerator_api.c:zend_accel_hash_is_full
Unexecuted instantiation: zend_accelerator_blacklist.c:zend_accel_hash_is_full
Unexecuted instantiation: zend_accelerator_debug.c:zend_accel_hash_is_full
Unexecuted instantiation: zend_accelerator_hash.c:zend_accel_hash_is_full
Unexecuted instantiation: zend_accelerator_module.c:zend_accel_hash_is_full
Unexecuted instantiation: zend_accelerator_util_funcs.c:zend_accel_hash_is_full
Unexecuted instantiation: zend_file_cache.c:zend_accel_hash_is_full
Unexecuted instantiation: zend_persist_calc.c:zend_accel_hash_is_full
Unexecuted instantiation: zend_persist.c:zend_accel_hash_is_full
Unexecuted instantiation: zend_shared_alloc.c:zend_accel_hash_is_full
ZendAccelerator.c:zend_accel_hash_is_full
Line
Count
Source
87
60.4k
{
88
60.4k
  if (accel_hash->num_entries == accel_hash->max_num_entries) {
89
0
    return true;
90
60.4k
  } else {
91
    return false;
92
60.4k
  }
93
60.4k
}
Unexecuted instantiation: zend_jit_vm_helpers.c:zend_accel_hash_is_full
Unexecuted instantiation: zend_jit.c:zend_accel_hash_is_full
Unexecuted instantiation: main.c:zend_accel_hash_is_full
94
95
END_EXTERN_C()
96
97
#endif /* ZEND_ACCELERATOR_HASH_H */