Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
187aa545
Commit
187aa545
authored
Jun 05, 2012
by
Kristján Valur Jónsson
6
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Signal condition variables with the mutex held. Destroy condition variables
before their mutexes.
parent
902274e9
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
14 additions
and
10 deletions
+14
-10
Python/ceval_gil.h
Python/ceval_gil.h
+5
-4
Python/thread_pthread.h
Python/thread_pthread.h
+9
-6
No files found.
Python/ceval_gil.h
View file @
187aa545
...
...
@@ -313,13 +313,14 @@ static void create_gil(void)
static
void
destroy_gil
(
void
)
{
MUTEX_FINI
(
gil_mutex
);
#ifdef FORCE_SWITCHING
MUTEX_FINI
(
switch_mutex
);
#endif
/* some pthread-like implementations tie the mutex to the cond
* and must have the cond destroyed first.
*/
COND_FINI
(
gil_cond
);
MUTEX_FINI
(
gil_mutex
);
#ifdef FORCE_SWITCHING
COND_FINI
(
switch_cond
);
MUTEX_FINI
(
switch_mutex
);
#endif
_Py_atomic_store_explicit
(
&
gil_locked
,
-
1
,
_Py_memory_order_release
);
_Py_ANNOTATE_RWLOCK_DESTROY
(
&
gil_locked
);
...
...
Python/thread_pthread.h
View file @
187aa545
...
...
@@ -443,12 +443,15 @@ PyThread_free_lock(PyThread_type_lock lock)
dprintf
((
"PyThread_free_lock(%p) called
\n
"
,
lock
));
status
=
pthread_mutex_destroy
(
&
thelock
->
mut
);
CHECK_STATUS
(
"pthread_mutex_destroy"
);
/* some pthread-like implementations tie the mutex to the cond
* and must have the cond destroyed first.
*/
status
=
pthread_cond_destroy
(
&
thelock
->
lock_released
);
CHECK_STATUS
(
"pthread_cond_destroy"
);
status
=
pthread_mutex_destroy
(
&
thelock
->
mut
);
CHECK_STATUS
(
"pthread_mutex_destroy"
);
free
((
void
*
)
thelock
);
}
...
...
@@ -531,12 +534,12 @@ PyThread_release_lock(PyThread_type_lock lock)
thelock
->
locked
=
0
;
status
=
pthread_mutex_unlock
(
&
thelock
->
mut
);
CHECK_STATUS
(
"pthread_mutex_unlock[3]"
);
/* wake up someone (anyone, if any) waiting on the lock */
status
=
pthread_cond_signal
(
&
thelock
->
lock_released
);
CHECK_STATUS
(
"pthread_cond_signal"
);
status
=
pthread_mutex_unlock
(
&
thelock
->
mut
);
CHECK_STATUS
(
"pthread_mutex_unlock[3]"
);
}
#endif
/* USE_SEMAPHORES */
...
...
Kirill Smelkov
@kirr
mentioned in commit
c5abd63e
·
Oct 03, 2019
mentioned in commit
c5abd63e
mentioned in commit c5abd63e94fcea10bdfa7a20842c6af3248bbd74
Toggle commit list
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment