Skip to content

Commit b5df1b4

Browse files
committed
Tmp observer support
1 parent 49936d1 commit b5df1b4

File tree

4 files changed

+40
-4
lines changed

4 files changed

+40
-4
lines changed

Zend/zend_observer.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,11 @@
2222
#define ZEND_OBSERVER_H
2323

2424
#include "zend.h"
25+
#include "zend_arena.h"
2526
#include "zend_compile.h"
2627
#include "zend_fibers.h"
28+
#include "zend_map_ptr.h"
29+
#include "zend_extensions.h"
2730

2831
BEGIN_EXTERN_C()
2932

@@ -105,6 +108,14 @@ static zend_always_inline bool zend_observer_fcall_has_no_observers(zend_execute
105108
return true;
106109
}
107110

111+
/* Internal function added at runtime and cached
112+
TODO: probably slow */
113+
if (!ZEND_MAP_PTR_GET(runtime_cache)) {
114+
ZEND_MAP_PTR_SET(function->common.run_time_cache,
115+
zend_arena_calloc(&CG(arena), 1,
116+
zend_internal_run_time_cache_reserved_size()));
117+
}
118+
108119
*handler = (zend_observer_fcall_begin_handler *)ZEND_MAP_PTR_GET(runtime_cache) + ZEND_OBSERVER_HANDLE(function);
109120
return zend_observer_handler_is_unobserved(*handler);
110121
}

ext/opcache/modules.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,6 +1116,24 @@ static zend_result zum_load(zend_file_handle *desc_file_handle, zend_persistent_
11161116
}
11171117

11181118
/* Load into process tables */
1119+
1120+
#if 0
1121+
if (zend_hash_num_elements(&pmodule->module.function_table) > 0) {
1122+
if (EXPECTED(!zend_observer_function_declared_observed)) {
1123+
zend_accel_function_hash_copy(CG(function_table), &pmodule->module.function_table);
1124+
} else {
1125+
zend_accel_function_hash_copy_notify(CG(function_table), &pmodule->module.function_table);
1126+
}
1127+
}
1128+
1129+
if (zend_hash_num_elements(&pmodule->module.class_table) > 0) {
1130+
if (EXPECTED(!zend_observer_class_linked_observed)) {
1131+
zend_accel_class_hash_copy(CG(class_table), &pmodule->module.class_table);
1132+
} else {
1133+
zend_accel_class_hash_copy_notify(CG(class_table), &pmodule->module.class_table);
1134+
}
1135+
}
1136+
#else
11191137
if (zend_hash_num_elements(&pmodule->module.function_table)) {
11201138
Bucket *p = pmodule->module.function_table.arData;
11211139
Bucket *end = p + pmodule->module.function_table.nNumUsed;
@@ -1161,6 +1179,7 @@ static zend_result zum_load(zend_file_handle *desc_file_handle, zend_persistent_
11611179
_zend_hash_append_ex(EG(class_table), p->key, &p->val, 1);
11621180
}
11631181
}
1182+
#endif
11641183

11651184
zend_hash_add_ptr(CG(module_table), pmodule->module.desc.lcname, &pmodule->module);
11661185

ext/opcache/zend_accelerator_util_funcs.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,12 +187,12 @@ static zend_always_inline void _zend_accel_function_hash_copy(HashTable *target,
187187
}
188188
}
189189

190-
static zend_always_inline void zend_accel_function_hash_copy(HashTable *target, HashTable *source)
190+
zend_always_inline void zend_accel_function_hash_copy(HashTable *target, HashTable *source)
191191
{
192192
_zend_accel_function_hash_copy(target, source, 0);
193193
}
194194

195-
static zend_never_inline void zend_accel_function_hash_copy_notify(HashTable *target, HashTable *source)
195+
zend_never_inline void zend_accel_function_hash_copy_notify(HashTable *target, HashTable *source)
196196
{
197197
_zend_accel_function_hash_copy(target, source, 1);
198198
}
@@ -248,12 +248,12 @@ static zend_always_inline void _zend_accel_class_hash_copy(HashTable *target, Ha
248248
target->nInternalPointer = 0;
249249
}
250250

251-
static zend_always_inline void zend_accel_class_hash_copy(HashTable *target, HashTable *source)
251+
zend_always_inline void zend_accel_class_hash_copy(HashTable *target, HashTable *source)
252252
{
253253
_zend_accel_class_hash_copy(target, source, 0);
254254
}
255255

256-
static zend_never_inline void zend_accel_class_hash_copy_notify(HashTable *target, HashTable *source)
256+
zend_never_inline void zend_accel_class_hash_copy_notify(HashTable *target, HashTable *source)
257257
{
258258
_zend_accel_class_hash_copy(target, source, 1);
259259
}

ext/opcache/zend_accelerator_util_funcs.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ unsigned int zend_adler32(unsigned int checksum, unsigned char *buf, uint32_t le
4444

4545
unsigned int zend_accel_script_checksum(zend_persistent_script *persistent_script);
4646

47+
void zend_accel_function_hash_copy(HashTable *target, HashTable *source);
48+
void zend_accel_function_hash_copy_notify(HashTable *target, HashTable *source);
49+
50+
void zend_accel_class_hash_copy(HashTable *target, HashTable *source);
51+
void zend_accel_class_hash_copy_notify(HashTable *target, HashTable *source);
52+
4753
END_EXTERN_C()
4854

4955
#endif /* ZEND_ACCELERATOR_UTIL_FUNCS_H */

0 commit comments

Comments
 (0)