Memory Leaks in TimeZone::Current DateTime::fromString, JSON_parser, Class::setMethods
- Dominant language
- C++
- Stars
- 18.7k
- Forks
- 3.1k
- Avg merge
- 1h 47m
- Merged PRs (30d)
- 2
Description
### HHVM Version
3.21.0
### Expected result
No leaks
### Actual result
Below are several leaks that valgrind reports. I'm not sure if these are actual bugs or expected or not. More-so looking for feedback right now if I'm doing something wrong or not.
I'm writing a gRPC extension and in it we call [vm_call_user_func](https://github.com/grpc/grpc/pull/11553/files#diff-dc3cde5a75735c2af762d92730cb03b6R255) at one point. It seems to be within this call that memory is leaked. I'm not sure if I should be doing something at the end of `vm_call_user_func` to clean up memory or if I'm using it in the wrong way. Thoughts?
```
==30918== 184 bytes in 23 blocks are possibly lost in loss record 22,029 of 24,930
==30918== at 0x543B203: operator new(unsigned long) (vg_replace_malloc.c:334)
==30918== by 0x14BF2AC: HPHP::ThreadLocal::create() (in /usr/local/bin/hhvm)
==30918== by 0x3705B54: HPHP::TimeZone::Current() (in /usr/local/bin/hhvm)
==30918== by 0x26B0C32: HPHP::c_DateTime_ni___construct(HPHP::ObjectData*, HPHP::String const&, HPHP::Variant const&) (in /usr/local/bin/hhvm)
==30918== by 0x198F7ED: void HPHP::Native::callFunc(HPHP::Func const*, void*, HPHP::TypedValue*, int, HPHP::TypedValue&) (in /usr/local/bin/hhvm)
==30918== by 0x198FD3C: HPHP::TypedValue* HPHP::Native::methodWrapper(HPHP::ActRec*) (in /usr/local/bin/hhvm)
==30918== by 0x37C77B9: unsigned char* HPHP::dispatchImpl() (in /usr/local/bin/hhvm)
==30918== by 0x13274E3: HPHP::ExecutionContext::invokeFunc(HPHP::Func const*, HPHP::Variant const&, HPHP::ObjectData*, HPHP::Class*, HPHP::VarEnv*, HPHP::StringData*, HPHP::ExecutionContext::InvokeFlags, bool) (in /usr/local/bin/hhvm)
==30918== by 0x36DA71D: HPHP::vm_call_user_func(HPHP::Variant const&, HPHP::Variant const&, bool) (in /usr/local/bin/hhvm)
==30918== by 0x162BAF4E: HPHP::plugin_do_get_metadata(void*, std::string const&, std::string const&, void (*)(void*, grpc_metadata const*, unsigned long, grpc_status_code, char const*), void*) (call_credentials.cpp:256)
==30918== by 0x162BB8BF: HPHP::plugin_get_metadata(void*, grpc_auth_metadata_context, void (*)(void*, grpc_metadata const*, unsigned long, grpc_status_code, char const*), void*) (call_credentials.cpp:308)
==30918== by 0x165CE642: plugin_get_request_metadata (plugin_credentials.c:146)
```
```
==30918== 552 bytes in 23 blocks are possibly lost in loss record 22,857 of 24,930
==30918== at 0x543B203: operator new(unsigned long) (vg_replace_malloc.c:334)
==30918== by 0x130A9DC: HPHP::RequestLocal::create() (in /usr/local/bin/hhvm)
==30918== by 0x370AA74: HPHP::DateTime::fromString(HPHP::String const&, HPHP::req::ptr, char const*, bool) (in /usr/local/bin/hhvm)
==30918== by 0x26B0DE7: HPHP::c_DateTime_ni___construct(HPHP::ObjectData*, HPHP::String const&, HPHP::Variant const&) (in /usr/local/bin/hhvm)
==30918== by 0x198F7ED: void HPHP::Native::callFunc(HPHP::Func const*, void*, HPHP::TypedValue*, int, HPHP::TypedValue&) (in /usr/local/bin/hhvm)
==30918== by 0x198FD3C: HPHP::TypedValue* HPHP::Native::methodWrapper(HPHP::ActRec*) (in /usr/local/bin/hhvm)
==30918== by 0x37C77B9: unsigned char* HPHP::dispatchImpl() (in /usr/local/bin/hhvm)
==30918== by 0x13274E3: HPHP::ExecutionContext::invokeFunc(HPHP::Func const*, HPHP::Variant const&, HPHP::ObjectData*, HPHP::Class*, HPHP::VarEnv*, HPHP::StringData*, HPHP::ExecutionContext::InvokeFlags, bool) (in /usr/local/bin/hhvm)
==30918== by 0x36DA71D: HPHP::vm_call_user_func(HPHP::Variant const&, HPHP::Variant const&, bool) (in /usr/local/bin/hhvm)
==30918== by 0x162BAF4E: HPHP::plugin_do_get_metadata(void*, std::string const&, std::string const&, void (*)(void*, grpc_metadata const*, unsigned long, grpc_status_code, char const*), void*) (call_credentials.cpp:256)
==30918== by 0x162BB8BF: HPHP::plugin_get_metadata(void*, grpc_auth_metadata_context, void (*)(void*, grpc_metadata const*, unsigned long, grpc_status_code, char const*), void*) (call_credentials.cpp:308)
==30918== by 0x165CE642: plugin_get_request_metadata (plugin_credentials.c:146)
```
```
==30918== 1,464 bytes in 7 blocks are possibly lost in loss record 23,901 of 24,930
==30918== at 0x543ABE3: malloc (vg_replace_malloc.c:299)
==30918== by 0x189446E: HPHP::FixedStringMap::init(int, unsigned int) (in /usr/local/bin/hhvm)
==30918== by 0x18A1CAD: HPHP::Class::setProperties() (in /usr/local/bin/hhvm)
==30918== by 0x18A5D14: HPHP::Class::Class(HPHP::PreClass*, HPHP::Class*, std::vector, std::allocator > >&&, unsigned int, unsigned int) (in /usr/local/bin/hhvm)
==30918== by 0x18A6624: HPHP::Class::newClass(HPHP::PreClass*, HPHP::Class*) (in /usr/local/bin/hhvm)
==30918== by 0x1A33C2B: HPHP::Unit::defClosure(HPHP::PreClass const*) (in /usr/local/bin/hhvm)
==30918== by 0x37C42C2: unsigned char* HPHP::dispatchImpl() (in /usr/local/bin/hhvm)
==30918== by 0x13274E3: HPHP::ExecutionContext::invokeFunc(HPHP::Func const*, HPHP::Variant const&, HPHP::ObjectData*, HPHP::Class*, HPHP::VarEnv*, HPHP::StringData*, HPHP::ExecutionContext::InvokeFlags, bool) (in /usr/local/bin/hhvm)
==30918== by 0x36DA71D: HPHP::vm_call_user_func(HPHP::Variant const&, HPHP::Variant const&, bool) (in /usr/local/bin/hhvm)
==30918== by 0x162BAF4E: HPHP::plugin_do_get_metadata(void*, std::string const&, std::string const&, void (*)(void*, grpc_metadata const*, unsigned long, grpc_status_code, char const*), void*) (call_credentials.cpp:256)
==30918== by 0x162BB8BF: HPHP::plugin_get_metadata(void*, grpc_auth_metadata_context, void (*)(void*, grpc_metadata const*, unsigned long, grpc_status_code, char const*), void*) (call_credentials.cpp:308)
==30918== by 0x165CE642: plugin_get_request_metadata (plugin_credentials.c:146)
```
```
==30918== 2,304 bytes in 9 blocks are definitely lost in loss record 24,153 of 24,930
==30918== at 0x543ABE3: malloc (vg_replace_malloc.c:299)
==30918== by 0x189446E: HPHP::FixedStringMap::init(int, unsigned int) (in /usr/local/bin/hhvm)
==30918== by 0x189DFDA: HPHP::Class::setMethods() (in /usr/local/bin/hhvm)
==30918== by 0x18A5CEC: HPHP::Class::Class(HPHP::PreClass*, HPHP::Class*, std::vector, std::allocator > >&&, unsigned int, unsigned int) (in /usr/local/bin/hhvm)
==30918== by 0x18A6624: HPHP::Class::newClass(HPHP::PreClass*, HPHP::Class*) (in /usr/local/bin/hhvm)
==30918== by 0x1A33C2B: HPHP::Unit::defClosure(HPHP::PreClass const*) (in /usr/local/bin/hhvm)
==30918== by 0x37C42C2: unsigned char* HPHP::dispatchImpl() (in /usr/local/bin/hhvm)
==30918== by 0x13274E3: HPHP::ExecutionContext::invokeFunc(HPHP::Func const*, HPHP::Variant const&, HPHP::ObjectData*, HPHP::Class*, HPHP::VarEnv*, HPHP::StringData*, HPHP::ExecutionContext::InvokeFlags, bool) (in /usr/local/bin/hhvm)
==30918== by 0x36DA71D: HPHP::vm_call_user_func(HPHP::Variant const&, HPHP::Variant const&, bool) (in /usr/local/bin/hhvm)
==30918== by 0x162BAF4E: HPHP::plugin_do_get_metadata(void*, std::string const&, std::string const&, void (*)(void*, grpc_metadata const*, unsigned long, grpc_status_code, char const*), void*) (call_credentials.cpp:256)
==30918== by 0x162BB8BF: HPHP::plugin_get_metadata(void*, grpc_auth_metadata_context, void (*)(void*, grpc_metadata const*, unsigned long, grpc_status_code, char const*), void*) (call_credentials.cpp:308)
==30918== by 0x165CE642: plugin_get_request_metadata (plugin_credentials.c:146)
```
```
==30918== 37,168 bytes in 23 blocks are possibly lost in loss record 24,835 of 24,930
==30918== at 0x543ABE3: malloc (vg_replace_malloc.c:299)
==30918== by 0x293C641: HPHP::JSON_parser(HPHP::Variant&, char const*, int, bool, int, long) (in /usr/local/bin/hhvm)
==30918== by 0x2936784: HPHP::f_json_decode(HPHP::String const&, bool, long, long) (in /usr/local/bin/hhvm)
==30918== by 0x1978259: HPHP::Native::callFuncTVImpl(HPHP::TypedValue* (*)(HPHP::ActRec*), long*, int, double*, int) (in /usr/local/bin/hhvm)
==30918== by 0x198F73E: void HPHP::Native::callFunc(HPHP::Func const*, void*, HPHP::TypedValue*, int, HPHP::TypedValue&) (in /usr/local/bin/hhvm)
==30918== by 0x198F909: HPHP::TypedValue* HPHP::Native::functionWrapper(HPHP::ActRec*) (in /usr/local/bin/hhvm)
==30918== by 0x37C77B9: unsigned char* HPHP::dispatchImpl() (in /usr/local/bin/hhvm)
==30918== by 0x13274E3: HPHP::ExecutionContext::invokeFunc(HPHP::Func const*, HPHP::Variant const&, HPHP::ObjectData*, HPHP::Class*, HPHP::VarEnv*, HPHP::StringData*, HPHP::ExecutionContext::InvokeFlags, bool) (in /usr/local/bin/hhvm)
==30918== by 0x36DA71D: HPHP::vm_call_user_func(HPHP::Variant const&, HPHP::Variant const&, bool) (in /usr/local/bin/hhvm)
==30918== by 0x162BAF4E: HPHP::plugin_do_get_metadata(void*, std::string const&, std::string const&, void (*)(void*, grpc_metadata const*, unsigned long, grpc_status_code, char const*), void*) (call_credentials.cpp:256)
==30918== by 0x162BB8BF: HPHP::plugin_get_metadata(void*, grpc_auth_metadata_context, void (*)(void*, grpc_metadata const*, unsigned long, grpc_status_code, char const*), void*) (call_credentials.cpp:308)
==30918== by 0x165CE642: plugin_get_request_metadata (plugin_credentials.c:146)
```
Contributor guide
Assessment
This issue has not been assessed yet.