[DCAE] INFO.yaml update
[dcaegen2/collectors/hv-ves.git] / sources / hv-collector-utils / src / main / kotlin / org / onap / dcae / collectors / veshv / utils / shutdown_hook.kt
index 2678a8d..cc94090 100644 (file)
  */
 package org.onap.dcae.collectors.veshv.utils
 
-import arrow.effects.IO
+import java.util.concurrent.atomic.AtomicReference
 
 /**
  * @author Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
  * @since January 2019
  */
 
-fun registerShutdownHook(job: () -> Unit) {
-    Runtime.getRuntime().addShutdownHook(object : Thread() {
-        override fun run() {
-            job()
-        }
-    })
-}
+private val currentShutdownHook = AtomicReference<Thread>()
 
-fun registerShutdownHook(job: IO<Unit>) = IO {
-    registerShutdownHook {
-        job.unsafeRunSync()
-    }
+fun registerShutdownHook(job: () -> Unit) {
+    val runtime = Runtime.getRuntime()
+    val newShutdownHook = Thread({ job() }, "GracefulShutdownThread")
+    currentShutdownHook.get()?.run(runtime::removeShutdownHook)
+    currentShutdownHook.set(newShutdownHook)
+    runtime.addShutdownHook(newShutdownHook)
 }