From 21e905da755e72be9c6bb4f2241b72e8f8d20fb8 Mon Sep 17 00:00:00 2001 From: Hizenberg Date: Fri, 15 Mar 2024 00:54:24 +0530 Subject: [PATCH] pthread cleanup API --- .../.vs/linux-debug/Ubuntu.scan.fgp.copy | 4 +- .../master_slave/.vs/master_slave/v17/.wsuo | Bin 39424 -> 39424 bytes .../.vs/master_slave/v17/Browse.VC.db | Bin 7766016 -> 7766016 bytes .../.vs/master_slave/v17/DocumentLayout.json | 4 +- .../master_slave/.vs/slnx.sqlite | Bin 131072 -> 131072 bytes .../master_slave/master_slave.c | 36 +++++++++++++++++- 6 files changed, 38 insertions(+), 6 deletions(-) diff --git a/ThreadCancellation_async/master_slave/.vs/linux-debug/Ubuntu.scan.fgp.copy b/ThreadCancellation_async/master_slave/.vs/linux-debug/Ubuntu.scan.fgp.copy index c7f50b9..6f8e487 100644 --- a/ThreadCancellation_async/master_slave/.vs/linux-debug/Ubuntu.scan.fgp.copy +++ b/ThreadCancellation_async/master_slave/.vs/linux-debug/Ubuntu.scan.fgp.copy @@ -1,6 +1,6 @@ 1870684405 E:\MultiThreading_Part_A\ThreadCancellation_async\master_slave\CMakeLists.txt 190002877 E:\MultiThreading_Part_A\ThreadCancellation_async\master_slave\CMakePresets.json 465106864 E:\MultiThreading_Part_A\ThreadCancellation_async\master_slave\main.c -1536483663 E:\MultiThreading_Part_A\ThreadCancellation_async\master_slave\master_slave.c +180745754 E:\MultiThreading_Part_A\ThreadCancellation_async\master_slave\master_slave.c 393795895 E:\MultiThreading_Part_A\ThreadCancellation_async\master_slave\master_slave.h -1551962192 E:\MultiThreading_Part_A\ThreadCancellation_async\master_slave\ +-1338719569 E:\MultiThreading_Part_A\ThreadCancellation_async\master_slave\ diff --git a/ThreadCancellation_async/master_slave/.vs/master_slave/v17/.wsuo b/ThreadCancellation_async/master_slave/.vs/master_slave/v17/.wsuo index b85139e456418afa9fbb393ce22e12d978c155ac..6a9c449afd41a91f0f532dc273fb1514f56e7cff 100644 GIT binary patch delta 428 zcmZqJ!ql*ZX+tg(i;4=j>*hkH)r_373=9nafk1xpK^E!B4lEj?GEfmYAT0>QoItFw zxt8SvBTJIgJ?G7ZY=;>YM1X=^Kr95rAnhRV4~Y4Jd|@Eo9Kw;$%FD=$Bt7|}j>_gQ zyyv-i8Q6isAQM2kAi@#>j65KxNFa-rNL^s!0XcyKMO5|*6Ne^>h(ZtRB&`!1Qpkc| zw0Ia7sj+O*apB_O0ZO2nY}UiP$;N|`1LOh_0J&mviR=X)n6qGln@j9AFi%!dP{FX0 z5o9Hb%f2}6HRcvLUG0rDP( I!Y)mI0Ls0h7ytkO delta 405 zcmZqJ!ql*ZX+tg(i$=vtwatZ0s~I`v7#JA-1A)xsgDldM9auC(WuYPpKw2J%1%a4z zb1lmUMwa;RD}dVA4l^nU0|mK&SOkbc+ChLH$QAAgB?Xgp@(&m2FoM|mB}h< zOE`Fu<-R!aux>JNVdDW=4l)a2x>*nNBn1x+n4=+9D)cZ;k`US~WM#(4fo5$F(1TKLGuL Bi#z}T diff --git a/ThreadCancellation_async/master_slave/.vs/master_slave/v17/Browse.VC.db b/ThreadCancellation_async/master_slave/.vs/master_slave/v17/Browse.VC.db index 4668bd2187691eda7c75fd4f5ffb8ad517c99892..c257e2aa63097b0749a0355f5ff3f593d5402e80 100644 GIT binary patch delta 2825 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 Od*Tm{9~d4wBK{W<{M4`j diff --git a/ThreadCancellation_async/master_slave/.vs/master_slave/v17/DocumentLayout.json b/ThreadCancellation_async/master_slave/.vs/master_slave/v17/DocumentLayout.json index cd676fd..7cbaa84 100644 --- a/ThreadCancellation_async/master_slave/.vs/master_slave/v17/DocumentLayout.json +++ b/ThreadCancellation_async/master_slave/.vs/master_slave/v17/DocumentLayout.json @@ -52,7 +52,7 @@ "RelativeDocumentMoniker": "master_slave.c", "ToolTip": "E:\\MultiThreading_Part_A\\ThreadCancellation_async\\master_slave\\master_slave.c", "RelativeToolTip": "master_slave.c", - "ViewState": "AQIAAAAAAAAAAAAAAAAAAA0AAAAZAAAA", + "ViewState": "AQIAAB4AAAAAAAAAAAAQwC4AAAARAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", "WhenOpened": "2024-03-14T10:31:49.359Z", "EditorCaption": "" @@ -65,7 +65,7 @@ "RelativeDocumentMoniker": "main.c", "ToolTip": "E:\\MultiThreading_Part_A\\ThreadCancellation_async\\master_slave\\main.c", "RelativeToolTip": "main.c", - "ViewState": "AQIAACEAAAAAAAAAAAAAAAEAAAAAAAAA", + "ViewState": "AQIAACQAAAAAAAAAAAAAAAEAAAAAAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000423|", "WhenOpened": "2024-03-14T10:21:23.52Z", "EditorCaption": "" diff --git a/ThreadCancellation_async/master_slave/.vs/slnx.sqlite b/ThreadCancellation_async/master_slave/.vs/slnx.sqlite index 1a2d8924978b33fd8d13c26eb1ca61f1ff3b3de5..efb64e2119f0d87f6ab149405bc3d67d2b855c6b 100644 GIT binary patch delta 34 qcmZo@;Am*zm>|uVKT*b+F@Ix1*?QI(-IbF*HQ!#p{q}lB)c^qCL=Hg! delta 34 qcmZo@;Am*zm>|uVHBrWyF>7N&*?Lx+n!8>x&9~QYzrCJOH2?tHA`QF% diff --git a/ThreadCancellation_async/master_slave/master_slave.c b/ThreadCancellation_async/master_slave/master_slave.c index a6e9016..077914e 100644 --- a/ThreadCancellation_async/master_slave/master_slave.c +++ b/ThreadCancellation_async/master_slave/master_slave.c @@ -1,5 +1,20 @@ #include "master_slave.h" +void +memory_cleanup_handler(void* arg) { + + printf("%s invoked ...\n", __FUNCTION__); + free(arg); +} + +void +file_cleanup_handler(void* arg) { + + printf("%s invoked ...\n", __FUNCTION__); + fclose((FILE*)arg); + +} + void * write_into_file(void* arg) { @@ -14,15 +29,22 @@ write_into_file(void* arg) { /* Mode of cancellation */ pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, 0); int* thread_id = (int*)arg; + + /* When pthread_cancel is invoked and this thread get the + signal to get cancelled, this API is invoked to free up the + resources used by this thread.*/ + pthread_cleanup_push(memory_cleanup_handler, arg); sprintf(file_name, "thread_%d.txt", *thread_id); FILE* fptr = fopen(file_name, "w"); + pthread_cleanup_push(file_cleanup_handler, fptr); + if (!fptr) { printf("Error : Could not open log file %s, errno = %d\n", file_name, errno); - return 0; + pthread_exit(0); } while (1) { @@ -32,6 +54,16 @@ write_into_file(void* arg) { sleep(1); } - fclose(fptr); + /* If this thread is successfully executed and the cancellation request + is not invoked till now then, the stack where resource free API are + need to be cleaned.*/ + pthread_cleanup_pop(0); + pthread_cleanup_pop(0); + + /*This is not executed as this thread is in infinite loop + and when the pthread_cancel is executed this thread is cancelled + while it was executing in the loop. Hence, this causes resource + leakage.*/ + // fclose(fptr); return 0; } \ No newline at end of file