Problem/Opportunity
see documentaion of std,
~thread();
Thread destructor
Destroys the thread object.
If the thread is joinable when destroyed, terminate() is called.
crash:
Thread 11 "WorkerPool::Thr" received signal SIGABRT, Aborted.
[Switching to Thread 11801.11857]
__libc_do_syscall () at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:47
47 in ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S
(gdb) bt
#0 __libc_do_syscall () at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:47
#1 0xb3abe300 in __pthread_kill_implementation (threadid=<optimized out>, signo=6, no_tid=<optimized out>) at pthread_kill.c:43
#2 0xb3a8fbb6 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#3 0xb3a815d4 in __GI_abort () at abort.c:79
#4 0xb3c32fac in __gnu_cxx::__verbose_terminate_handler () at ../../../../../../../../work-shared/gcc-11.3.0-r0/gcc-11.3.0/libstdc++-v3/libsupc++/vterminate.cc:95
#5 0xb3c31bdc in __cxxabiv1::__terminate (handler=<optimized out>)
at ../../../../../../../../work-shared/gcc-11.3.0-r0/gcc-11.3.0/libstdc++-v3/libsupc++/eh_terminate.cc:48
#6 0xb3c31c3e in std::terminate () at ../../../../../../../../work-shared/gcc-11.3.0-r0/gcc-11.3.0/libstdc++-v3/libsupc++/eh_terminate.cc:58
#7 0xa955ec56 in std::thread::~thread (this=<optimized out>, __in_chrg=<optimized out>) at /usr/include/c++/11.3.0/bits/std_thread.h:152
#8 0xa95550dc in WPEFramework::Plugin::MaintenanceManager::~MaintenanceManager (this=this@entry=0x740688, __in_chrg=__in_chrg@entry=0,
__vtt_parm=0xa9583e38 <VTT for WPEFramework::Core::ProxyObject<WPEFramework::Plugin::Metadata<WPEFramework::Plugin::MaintenanceManager>::PluginImplementation<WPEFramework::Plugin::MaintenanceManager> >+12>) at /usr/include/c++/11.3.0/ext/new_allocator.h:89
#9 0xa9555172 in WPEFramework::Plugin::MaintenanceManager::~MaintenanceManager (this=this@entry=0x740688, __vtt_parm=<optimized out>)
at /usr/src/debug/rdkservices/3.0+gitAUTOINC+93fce14482-r1/git/MaintenanceManager/MaintenanceManager.cpp:1456
#10 0xa95693e0 in WPEFramework::Core::Service<WPEFramework::Plugin::MaintenanceManager>::~Service (this=this@entry=0x740688, __in_chrg=__in_chrg@entry=0,
__vtt_parm=0xa9583e34 <VTT for WPEFramework::Core::ProxyObject<WPEFramework::Plugin::Metadata<WPEFramework::Plugin::MaintenanceManager>::PluginImplementation<WPEFramework::Plugin::MaintenanceManager> >+8>) at /usr/include/WPEFramework/core/Services.h:124
#11 0xa9569424 in WPEFramework::Core::Service<WPEFramework::Plugin::MaintenanceManager>::~Service (this=this@entry=0x740688, __vtt_parm=<optimized out>)
at /usr/include/WPEFramework/core/Services.h:181
#12 0xa9569622 in WPEFramework::Plugin::Metadata<WPEFramework::Plugin::MaintenanceManager>::PluginImplementation<WPEFramework::Plugin::MaintenanceManager>::~PluginImplementation (this=this@entry=0x740688, __in_chrg=__in_chrg@entry=0, __vtt_parm=<optimized out>) at /usr/include/WPEFramework/plugins/MetaData.h:385
#13 0xa9569664 in WPEFramework::Plugin::Metadata<WPEFramework::Plugin::MaintenanceManager>::PluginImplementation<WPEFramework::Plugin::MaintenanceManager>::~PluginImplementation (this=this@entry=0x740688, __vtt_parm=<optimized out>) at /usr/include/WPEFramework/plugins/MetaData.h:385
#14 0xa956969a in WPEFramework::Core::ProxyObject<WPEFramework::Plugin::Metadata<WPEFramework::Plugin::MaintenanceManager>::PluginImplementation<WPEFramework::Plugin::MaintenanceManager> >::~ProxyObject (this=this@entry=0x740688, __in_chrg=__in_chrg@entry=2, __vtt_parm=__vtt_parm@entry=0x0)
at /usr/include/WPEFramework/core/Proxy.h:247
#15 0xa95696d0 in WPEFramework::Core::ProxyObject<WPEFramework::Plugin::Metadata<WPEFramework::Plugin::MaintenanceManager>::PluginImplementation<WPEFramework::Plugin::MaintenanceManager> >::~ProxyObject (this=this@entry=0x740688) at /usr/include/WPEFramework/core/Proxy.h:108
#16 0xa95696fa in WPEFramework::Core::ProxyObject<WPEFramework::Plugin::Metadata<WPEFramework::Plugin::MaintenanceManager>::PluginImplementation<WPEFramework::Plugin::MaintenanceManager> >::~ProxyObject (this=this@entry=0x740688) at /usr/include/WPEFramework/core/Proxy.h:119
#17 0xa9569746 in WPEFramework::Core::ProxyObject<WPEFramework::Plugin::Metadata<WPEFramework::Plugin::MaintenanceManager>::PluginImplementation<WPEFramework::Plugin::MaintenanceManager> >::Release (this=0x740688) at /usr/include/WPEFramework/core/Proxy.h:136
#18 0x00066bca in WPEFramework::PluginHost::Server::Service::ReleaseInterfaces (this=0x62ee58)
at /usr/src/debug/wpeframework/4.4-r0/git/Source/WPEFramework/PluginServer.h:2043
#19 0x0005f182 in WPEFramework::PluginHost::Server::Service::Deactivate (this=0x62ee58, why=<optimized out>)
at /usr/src/debug/wpeframework/4.4-r0/git/Source/WPEFramework/PluginServer.cpp:593
--Type <RET> for more, q to quit, c to continue without paging--c
#20 0x0003e324 in WPEFramework::Plugin::Controller::PutMethod (this=this@entry=0x7086a8, index=..., request=...)
at /usr/src/debug/wpeframework/4.4-r0/git/Source/WPEFramework/Controller.cpp:562
#21 0x0003f40e in WPEFramework::Plugin::Controller::Process (this=0x7086a8, request=...)
at /usr/src/debug/wpeframework/4.4-r0/git/Source/WPEFramework/Controller.cpp:220
#22 0x00064d20 in WPEFramework::PluginHost::Server::Service::Process (this=0x68e620, request=...)
at /usr/src/debug/wpeframework/4.4-r0/git/Source/WPEFramework/PluginServer.h:1430
#23 0x0007140e in WPEFramework::PluginHost::Server::Channel::Job::Process (message=..., this=0xb0961c40)
at /usr/src/debug/wpeframework/4.4-r0/git/Source/core/../core/Proxy.h:541
#24 WPEFramework::PluginHost::Server::Channel::WebRequestJob::Dispatch (this=0xb0961c40)
at /usr/src/debug/wpeframework/4.4-r0/git/Source/WPEFramework/PluginServer.h:3684
#25 0x00065c08 in WPEFramework::Core::ThreadPool::Minion::Process (this=this@entry=0x5b8ac8)
at /usr/src/debug/wpeframework/4.4-r0/git/Source/core/../core/ThreadPool.h:452
#26 0x00065d66 in WPEFramework::Core::ThreadPool::Executor::Worker (this=0x5b89d8) at /usr/src/debug/wpeframework/4.4-r0/git/Source/core/../core/ThreadPool.h:540
#27 0xb3d0937c in WPEFramework::Core::Thread::StartThread (cClassPointer=0x5b89d8) at /usr/src/debug/wpeframework/4.4-r0/git/Source/core/Thread.cpp:194
#28 0xb3abcc86 in start_thread (arg=0x6642e226) at pthread_create.c:442
#29 0xb3b0d3c0 in ?? () at ../sysdeps/unix/sysv/linux/arm/clone.S:74 from /home/npoltorapavlo/Downloads/gdb/lib/libc.so.6
log:
2025-12-15T13:01:19.674Z MaintenanceManager[11801]: INFO [MaintenanceManager.cpp:1492] Deinitialize: Timer Deleted on Deinitialization.
2025-12-15T13:01:19.675Z MaintenanceManager[11801]: INFO [MaintenanceManager.cpp:2269] stopMaintenanceTasks: Request for stopMaintenance()
2025-12-15T13:01:19.675Z MaintenanceManager[11801]: INFO [MaintenanceManager.cpp:2276] stopMaintenanceTasks: Stopping maintenance activities
2025-12-15T13:01:19.676Z MaintenanceManager[11801]: INFO [MaintenanceManager.cpp:2338] stopMaintenanceTasks: Maintenance Status is not MAINTENANCE_STARTED, Hence can not stop the Maintenance execution
2025-12-15T13:01:19.680Z WPEFramework[11801]: [11857] INFO [MaintenanceManager.cpp:1795] DeinitializeIARM: IARM IARM_Bus_RemoveEventHandler(IARM_BUS_MAINTENANCE_MGR_NAME, IARM_BUS_MAINTENANCEMGR_EVENT_UPDATE, _MaintenanceMgrEventHandler): success
2025-12-15T13:01:19.680Z WPEFramework[11801]: [SysLog]:[Shutdown]: Deactivated plugin [MaintenanceManager]:[org.rdk.MaintenanceManager]
code of MaintenanceManager stops thread conditionally relying on exact status MAINTENANCE_STARTED in variable m_notify_status. However, crash shows status isn't MAINTENANCE_STARTED and thread is started:
bool MaintenanceManager::stopMaintenanceTasks()
{
...
if (MAINTENANCE_STARTED == m_notify_status)
{
...
if (m_thread.joinable())
{
m_thread.join();
maintenanceManagerOnBootup() sets status MAINTENANCE_IDLE (which is not MAINTENANCE_STARTED) and starts the same thread:
void MaintenanceManager::maintenanceManagerOnBootup()
{
...
MaintenanceManager::m_notify_status = MAINTENANCE_IDLE;
...
m_thread = std::thread(&MaintenanceManager::task_execution_thread, _instance);
a bug in MaintenanceManager code.
Steps to reproduce
No response
Expected Behavior
Threads should stop by service's Deinitialize
Actual Behavior
Thread is active in service destructor
Notes (Optional)
No response
Problem/Opportunity
see documentaion of std,
crash:
log:
code of MaintenanceManager stops thread conditionally relying on exact status MAINTENANCE_STARTED in variable m_notify_status. However, crash shows status isn't MAINTENANCE_STARTED and thread is started:
maintenanceManagerOnBootup() sets status MAINTENANCE_IDLE (which is not MAINTENANCE_STARTED) and starts the same thread:
a bug in MaintenanceManager code.
Steps to reproduce
No response
Expected Behavior
Threads should stop by service's Deinitialize
Actual Behavior
Thread is active in service destructor
Notes (Optional)
No response