Skip to contentSkip to conversation

testfrmw:disable thread cancelability while output is running

PATCH Superseded lidan 2 participants 3 messages Mar 21, 2012 – Mar 22, 2012

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore

lidan

author
#0 lore raw

PATCH 1/1 testfrmw:disable thread cancelability while output is running

Function output can be canceled by pthread_cancel(), which, maybe, leads to a deadlock as it calls pthread_mutex_lock(). That's catched in case "pthread_join/4-1.c".

So,disable thread cancelability until output finishes.

---
.../conformance/interfaces/testfrmw/testfrmw.c | 4 ++++

1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/testcases/open_posix_testsuite/conformance/interfaces/testfrmw/testfrmw.c b/testcases/open_posix_testsuite/conformance/interfaces/testfrmw/testfrmw.c index 034faa9..fb54ee9 100644
---
a/testcases/open_posix_testsuite/conformance/interfaces/testfrmw/testfrmw.c
+++
b/testcases/open_posix_testsuite/conformance/interfaces/testfrmw/testfrmw.c @@ -28,6 +28,7 @@

#include <time.h>
#include <sys/types.h>
+#include <pthread.h>

/* We use a mutex to avoid conflicts in traces */ static pthread_mutex_t m_trace = PTHREAD_MUTEX_INITIALIZER; @@ -43,7 +44,9 @@ void output(char *string, ...) char *ts = "[??:??:??]";
struct tm *now;
time_t nw;
+ int oldstate;

+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,&oldstate); pthread_mutex_lock(&m_trace);
nw = time(NULL);
now = localtime(&nw);
@@ -56,6 +59,7 @@ void output(char *string, ...) vprintf(string, ap);
va_end(ap);
pthread_mutex_unlock(&m_trace);
+ pthread_setcancelstate(oldstate,NULL);
}

void output_fini(void)
--
1.7.1

------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#1 lore raw
Quoted 5 lines · lidan

Function output can be canceled by pthread_cancel(), which, maybe, leads to a deadlock as it calls pthread_mutex_lock(). That's catched in case "pthread_join/4-1.c".

So,disable thread cancelability until output finishes.

The concept seems OK, but you should follow the coding style and patch format.

Thanks,
Wanlong Gao

Quoted 45 lines

---
.../conformance/interfaces/testfrmw/testfrmw.c | 4 ++++

1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/testcases/open_posix_testsuite/conformance/interfaces/testfrmw/testfrmw.c b/testcases/open_posix_testsuite/conformance/interfaces/testfrmw/testfrmw.c index 034faa9..fb54ee9 100644
---
a/testcases/open_posix_testsuite/conformance/interfaces/testfrmw/testfrmw.c
+++
b/testcases/open_posix_testsuite/conformance/interfaces/testfrmw/testfrmw.c

(quoted diff) +4 -1
@@ -28,6 +28,7 @@
 
 #include <time.h>
 #include <sys/types.h>
+#include <pthread.h>
 
 /* We use a mutex to avoid conflicts in traces */
 static pthread_mutex_t m_trace = PTHREAD_MUTEX_INITIALIZER;
@@ -43,7 +44,9 @@ void output(char *string, ...)
 char *ts = "[??:??:??]";
 struct tm *now;
 time_t nw;
+ int oldstate;
 
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,&oldstate);
 pthread_mutex_lock(&m_trace);
 nw = time(NULL);
 now = localtime(&nw);
@@ -56,6 +59,7 @@ void output(char *string, ...)
 vprintf(string, ap);
 va_end(ap);
 pthread_mutex_unlock(&m_trace);
+ pthread_setcancelstate(oldstate,NULL);
 }
 
 void output_fini(void)
--

1.7.1

Quoted 9 lines

------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#2 lore raw
In reply to lidan

如果用git-sendemail发patch的话可以配置git,更方便。

#cat ~/.gitconfig

1 [user]

  2         email           = [email protected]
  3         name            = Wanlong Gao
  4 [sendemail]
  5         from            = Wanlong Gao <[email protected]>
  6         smtpuser        = [email protected]
  7         smtppass        = XXXXXXXXXXX
  8         smtpserver      = smtp.fnst.cn.fujitsu.com
  9         smtpencryption  = plain
 10 [color]
 11         diff            = true
 12 [format]
 13         headers = "From: Wanlong Gao <[email protected]>\n"
 14         numbered = auto
 15         signoff = true

Thanks,
Wanlong Gao

Quoted 50 lines

Function output can be canceled by pthread_cancel(), which, maybe, leads to a deadlock as it calls pthread_mutex_lock(). That's catched in case "pthread_join/4-1.c".

So,disable thread cancelability until output finishes.

---
.../conformance/interfaces/testfrmw/testfrmw.c | 4 ++++

1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/testcases/open_posix_testsuite/conformance/interfaces/testfrmw/testfrmw.c b/testcases/open_posix_testsuite/conformance/interfaces/testfrmw/testfrmw.c index 034faa9..fb54ee9 100644
---
a/testcases/open_posix_testsuite/conformance/interfaces/testfrmw/testfrmw.c
+++
b/testcases/open_posix_testsuite/conformance/interfaces/testfrmw/testfrmw.c

(quoted diff) +4 -1
@@ -28,6 +28,7 @@
 
 #include <time.h>
 #include <sys/types.h>
+#include <pthread.h>
 
 /* We use a mutex to avoid conflicts in traces */
 static pthread_mutex_t m_trace = PTHREAD_MUTEX_INITIALIZER;
@@ -43,7 +44,9 @@ void output(char *string, ...)
 char *ts = "[??:??:??]";
 struct tm *now;
 time_t nw;
+ int oldstate;
 
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,&oldstate);
 pthread_mutex_lock(&m_trace);
 nw = time(NULL);
 now = localtime(&nw);
@@ -56,6 +59,7 @@ void output(char *string, ...)
 vprintf(string, ap);
 va_end(ap);
 pthread_mutex_unlock(&m_trace);
+ pthread_setcancelstate(oldstate,NULL);
 }
 
 void output_fini(void)
--

1.7.1

Quoted 9 lines

------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list