dump: failure as open file handles are not closed

Dump manager adds watch using inotify_add_watch when
dump generation starts and closes the fd(file handle)
returned by the inotify_add_watch after dump generation
is completed.

Due to logic error, the fd is not closed, due to that
the application exhausts the fd count over time when a
lot of dumps are generated and it fails eventually.

The dump manager maintains stl::map of the path and watch
objects for newly created dumps so that when dump generation
is completed it can create D-Bus objects for the dumps.

When adding new entry to the stl::map dump directory is passed
and when clearing the entry the file path of dump file is pased
due to this entry from stl::map is not cleard and so is the
watch object.

Tested:
Post changes able to trigger 200+ dumps without any issue.

Verfied the open fd for the dump manager process before and after
dump genration and ensured that fd's are not incread.

before dump generation
root@p10bmc:~# ls -la /proc/4890/fd
dr-x------    2 root     root             0 Jan 20 10:03 .
dr-xr-xr-x    8 root     root             0 Jan 20 10:03 ..
lr-x------    1 root     root            64 Jan 20 10:04 0 -> /dev/null
lrwx------    1 root     root            64 Jan 20 10:04 1 -> socket:[35868]
lrwx------    1 root     root            64 Jan 20 10:04 2 -> socket:[35868]
lrwx------    1 root     root            64 Jan 20 10:03 3 -> socket:[35873]
lrwx------    1 root     root            64 Jan 20 10:04 4 ->
anon_inode:[eventpoll]
lr-x------    1 root     root            64 Jan 20 10:04 5 -> anon_inode:inotify
lrwx------    1 root     root            64 Jan 20 10:04 6 ->
anon_inode:[timerfd]

after dump generation
root@p10bmc:~# ls -la /proc/4890/fd
dr-x------    2 root     root             0 Jan 20 10:03 .
dr-xr-xr-x    8 root     root             0 Jan 20 10:03 ..
lr-x------    1 root     root            64 Jan 20 10:04 0 -> /dev/null
lrwx------    1 root     root            64 Jan 20 10:04 1 -> socket:[35868]
lrwx------    1 root     root            64 Jan 20 10:04 2 -> socket:[35868]
lrwx------    1 root     root            64 Jan 20 10:03 3 -> socket:[35873]
lrwx------    1 root     root            64 Jan 20 10:04 4 ->
anon_inode:[eventpoll]
lr-x------    1 root     root            64 Jan 20 10:04 5 -> anon_inode:inotify
lrwx------    1 root     root            64 Jan 20 10:04 6 ->
anon_inode:[timerfd]
lrwx------    1 root     root            64 Jan 20 10:05 7 -> socket:[35916]

Signed-off-by: Chirag Sharma <chirshar@in.ibm.com>
Change-Id: I67c704719e9991fdff478891f9dc72045fb0e9e1
diff --git a/dump_manager_bmc.cpp b/dump_manager_bmc.cpp
index d5dd987..94f8f40 100644
--- a/dump_manager_bmc.cpp
+++ b/dump_manager_bmc.cpp
@@ -210,9 +210,19 @@
         // and associated inotify watch.
         if (IN_CLOSE_WRITE == i.second)
         {
-            removeWatch(i.first);
+            if (!std::filesystem::is_directory(i.first))
+            {
+                // Don't require filename to be passed, as the path
+                // of dump directory is stored in the childWatchMap
+                removeWatch(i.first.parent_path());
 
-            createEntry(i.first);
+                // dump file is written now create D-Bus entry
+                createEntry(i.first);
+            }
+            else
+            {
+                removeWatch(i.first);
+            }
         }
         // Start inotify watch on newly created directory.
         else if ((IN_CREATE == i.second) &&