- Iterator was being incremented twice, one when erase()
is called (implicit [1]) and another one just after to call erase
(explicitly), when unregistering a pid/surface_id.
Bug-AGL: SPEC-2078
[1] https://www.techiedelight.com/remove-elements-vector-inside-loop-cpp
Change-Id: Ia3cc3981480cf76b839043be49d257d5be011d60
Signed-off-by: Nick Diego Yamane <nickdiego@igalia.com>
#include <sys/time.h>
#include <sys/wait.h>
+#include <algorithm>
#include <cstdio>
#include "cpptoml/cpptoml.h"
void POSIXLauncher::unregister_surfpid (pid_t surf_pid)
{
- auto itr = m_pid_v.begin();
- while (itr != m_pid_v.end()) {
- if (*itr == surf_pid) {
- m_pid_v.erase(itr++);
- } else {
- ++itr;
- }
- }
+ auto beg = m_pid_v.begin();
+ auto end = m_pid_v.end();
+ m_pid_v.erase(std::remove(beg, end, surf_pid), end);
+ AGL_DEBUG("Unregistered surface (id=%d sz=%u)", surf_pid, m_pid_v.size());
}
pid_t POSIXLauncher::find_surfpid_by_rid (pid_t rid)