Skip to content

Commit 14399db

Browse files
committed
Move variable declaration and refactor code on dump tools
1 parent 20cde3b commit 14399db

File tree

5 files changed

+71
-73
lines changed

5 files changed

+71
-73
lines changed

Modules/_multiprocessing/dump_shm_macosx/dump_shared_mem.c

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@
66
#include <semaphore.h> // sem_t
77
typedef sem_t *SEM_HANDLE;
88

9-
#define MAX_SEMAPHORES_SHOW 32
10-
119
#include "../semaphore_macosx.h"
12-
#include "shared_mem.h"
10+
#include "./shared_mem.h"
1311

1412
// Static datas for each process.
1513
CountersWorkaround shm_semlock_counters = {
@@ -25,6 +23,8 @@ CountersWorkaround shm_semlock_counters = {
2523
HeaderObject *header = NULL;
2624
CounterObject *counter = NULL;
2725

26+
#define MAX_SEMAPHORES_SHOW 32
27+
2828
static char *show_counter(char *p, CounterObject *counter) {
2929
sprintf(p, "p:%p, n:%s, v:%d, t:%s", counter,
3030
counter->sem_name,
@@ -63,11 +63,11 @@ int main(int argc, char *argv[]) {
6363
HeaderObject save = {0};
6464
int unlink = 0;
6565
int force_open = 1;
66-
int release_lock = 1;
66+
int releases_lock = 1;
6767

6868
puts("--------");
6969
printf("PID:%d, PPID:%d\n", getpid(), getppid());
70-
connect_shm_semlock_counters(unlink, force_open, release_lock);
70+
connect_shm_semlock_counters(unlink, force_open, releases_lock);
7171
puts("+++++++++");
7272
if (argc > 1) {
7373
sscanf(argv[1], "%d", &repeat);
@@ -86,17 +86,15 @@ int main(int argc, char *argv[]) {
8686
if (shm_semlock_counters.state_this == THIS_AVAILABLE) {
8787
memset(&save, '\0', sizeof(save));
8888
do {
89-
//ACQUIRE_SHM_LOCK;
90-
acquire_lock(shm_semlock_counters.handle_shm_lock);
89+
ACQUIRE_SHM_LOCK;
9190
if (memcmp(&save, shm_semlock_counters.header, sizeof(HeaderObject)) ) {
9291
time_t timestamp = time(NULL);
9392
puts(ctime(&timestamp));
9493
dump_shm_semlock_counters();
9594
memcpy(&save, shm_semlock_counters.header, sizeof(HeaderObject));
9695
puts("==========");
9796
}
98-
//RELEASE_SHM_LOCK;
99-
sem_post(shm_semlock_counters.handle_shm_lock);
97+
RELEASE_SHM_LOCK;
10098
usleep(udelay);
10199
} while(repeat--);
102100
}

Modules/_multiprocessing/dump_shm_macosx/reset_shared_mem.c

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
#include <unistd.h>
22
#include <stdio.h> // puts, printf, scanf
3-
#include <string.h> // memcpy, memcmp, memset
3+
#include <ctype.h> // isupper
4+
#include <string.h> // memset
45

5-
#include <semaphore.h>
6+
#include <semaphore.h> // sem_t
67
typedef sem_t *SEM_HANDLE;
78

89
#include "../semaphore_macosx.h"
9-
#include "shared_mem.h"
10+
#include "./shared_mem.h"
1011

1112
// Static datas for each process.
1213
CountersWorkaround shm_semlock_counters = {
@@ -26,31 +27,28 @@ static void reset_shm_semlock_counters(int size, int nb_slots) {
2627
puts(__func__);
2728

2829
if (shm_semlock_counters.state_this == THIS_AVAILABLE) {
29-
if (ACQUIRE_SHM_LOCK) {
30-
CounterObject *counter = shm_semlock_counters.counters;
31-
HeaderObject *header = shm_semlock_counters.header;
32-
dump_shm_semlock_header_counters();
33-
dump_shm_semlock_header();
34-
long size_to_reset = header->size_shm-sizeof(HeaderObject);
35-
printf("1 - size to reset:%lu\n", size_to_reset);
36-
if (size && size <= size_to_reset) {
37-
memset(counter, 0, size);
30+
ACQUIRE_SHM_LOCK;
31+
CounterObject *counter = shm_semlock_counters.counters;
32+
HeaderObject *header = shm_semlock_counters.header;
33+
dump_shm_semlock_header_counters();
34+
dump_shm_semlock_header();
35+
long size_to_reset = header->size_shm-sizeof(HeaderObject);
36+
printf("1 - size to reset:%lu\n", size_to_reset);
37+
if (size && size <= size_to_reset) {
38+
memset(counter, 0, size);
3839

39-
} else {
40-
memset(counter, 0, size_to_reset);
41-
}
42-
puts("2 - Reset all header parameters");
43-
if (nb_slots) {
44-
header->n_slots = nb_slots;
45-
}
46-
header->n_semlocks = 0;
47-
header->n_slots = CALC_NB_SLOTS(header->size_shm);
48-
header->n_procs = 0;
49-
dump_shm_semlock_header();
50-
RELEASE_SHM_LOCK;
40+
} else {
41+
memset(counter, 0, size_to_reset);
5142
}
52-
} else {
53-
puts("No datas");
43+
puts("2 - Reset all header parameters");
44+
if (nb_slots) {
45+
header->n_slots = nb_slots;
46+
}
47+
header->n_semlocks = 0;
48+
header->n_slots = CALC_NB_SLOTS(header->size_shm);
49+
header->n_procs = 0;
50+
dump_shm_semlock_header();
51+
RELEASE_SHM_LOCK;
5452
}
5553
}
5654

@@ -75,7 +73,7 @@ int main(int argc, char *argv[]) {
7573
if (shm_semlock_counters.state_this == THIS_AVAILABLE) {
7674
puts("confirm (Y/N):");
7775
c = getchar();
78-
if ( c == 'Y' || c == 'y') {
76+
if ( isupper(c) == 'Y') {
7977
reset_shm_semlock_counters(size, nb_slots);
8078
}
8179
}

Modules/_multiprocessing/dump_shm_macosx/shared_mem.c

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ int release_lock(SEM_HANDLE sem) {
2525
return 1;
2626
}
2727

28-
int exists_lock(SEM_HANDLE sem) {
28+
int exist_lock(SEM_HANDLE sem) {
2929
int res = -1 ;
3030

3131
errno = 0;
@@ -64,6 +64,7 @@ puts(__func__);
6464
if (sem == SEM_FAILED) {
6565
errno = 0;
6666
// Semaphore exists, just opens it.
67+
printf("Try to open glock '%s'\n", shm_semlock_counters.name_shm_lock);
6768
sem = sem_open(shm_semlock_counters.name_shm_lock, 0);
6869
// Not exists, creates it.
6970
if (force_open && sem == SEM_FAILED) {
@@ -78,50 +79,48 @@ puts(__func__);
7879
}
7980

8081
// Locks to semaphore.
81-
if (sem != SEM_FAILED && ACQUIRE_SHM_LOCK) {
82-
printf("Shm Lock ok on %p\n", sem);
83-
// connect to Shared mem
84-
shm = shm_open(shm_semlock_counters.name_shm, oflag, 0);
85-
if (shm != -1) {
86-
shm_semlock_counters.handle_shm = shm;
87-
printf("Shared Mem ok on '%d'\n", shm);
88-
char *ptr = (char *)mmap(NULL,
89-
size_shm,
90-
(PROT_WRITE | PROT_READ),
91-
MAP_SHARED,
92-
shm_semlock_counters.handle_shm,
93-
0L);
94-
shm_semlock_counters.header = (HeaderObject *)ptr;
95-
shm_semlock_counters.counters = (CounterObject *)(ptr+sizeof(HeaderObject));
96-
printf("Shared memory size is %lu vs %d\n", size_shm,
97-
shm_semlock_counters.header->size_shm);
98-
// Initialization is successful.
99-
shm_semlock_counters.state_this = THIS_AVAILABLE;
100-
header = shm_semlock_counters.header;
101-
counter = shm_semlock_counters.counters;
102-
if (unlink) {
103-
atexit(delete_shm_semlock_counters);
82+
ACQUIRE_SHM_LOCK;
83+
printf("Shm Lock ok on %p\n", sem);
84+
// connect to Shared mem
85+
shm = shm_open(shm_semlock_counters.name_shm, oflag, 0);
86+
if (shm != -1) {
87+
shm_semlock_counters.handle_shm = shm;
88+
printf("Shared Mem ok on '%d'\n", shm);
89+
char *ptr = (char *)mmap(NULL,
90+
size_shm,
91+
(PROT_WRITE | PROT_READ),
92+
MAP_SHARED,
93+
shm_semlock_counters.handle_shm,
94+
0L);
95+
shm_semlock_counters.header = (HeaderObject *)ptr;
96+
shm_semlock_counters.counters = (CounterObject *)(ptr+sizeof(HeaderObject));
97+
printf("Shared memory size is %lu vs %d\n", size_shm,
98+
shm_semlock_counters.header->size_shm);
99+
// Initialization is successful.
100+
shm_semlock_counters.state_this = THIS_AVAILABLE;
101+
header = shm_semlock_counters.header;
102+
counter = shm_semlock_counters.counters;
103+
if (unlink) {
104+
atexit(delete_shm_semlock_counters);
104105

105-
} else {
106-
atexit(delete_shm_semlock_counters_without_unlink);
107-
}
108-
puts("Ok....");
109106
} else {
110-
printf("The shared memory '%s' does not exist\n", shm_semlock_counters.name_shm);
107+
atexit(delete_shm_semlock_counters_without_unlink);
111108
}
112-
RELEASE_SHM_LOCK;
113-
printf("Shm Unlock ok on %p\n", sem);
109+
puts("Ok....");
114110
} else {
115-
puts("No Semaphore opened !!");
111+
printf("The shared memory '%s' does not exist\n", shm_semlock_counters.name_shm);
116112
}
113+
RELEASE_SHM_LOCK;
114+
printf("Shm Unlock ok on %p\n", sem);
115+
117116
}
118117

119-
static void _delete_shm_semlock_counters(int unlink) {
118+
void _delete_shm_semlock_counters(int unlink) {
120119

121120
puts("clean up...");
122121
if (shm_semlock_counters.state_this == THIS_AVAILABLE) {
123122
if (shm_semlock_counters.counters) {
124-
ACQUIRE_SHM_LOCK;
123+
ACQUIRE_SHM_LOCK;
125124
// unmmap
126125
munmap(shm_semlock_counters.counters,
127126
shm_semlock_counters.header->size_shm);
@@ -134,7 +133,9 @@ static void _delete_shm_semlock_counters(int unlink) {
134133
}
135134
// close lock
136135
sem_close(shm_semlock_counters.handle_shm_lock);
137-
sem_unlink(shm_semlock_counters.name_shm_lock);
136+
if (unlink) {
137+
sem_unlink(shm_semlock_counters.name_shm_lock);
138+
}
138139
}
139140

140141

Modules/_multiprocessing/dump_shm_macosx/shared_mem.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ extern CounterObject *counter;
77

88
extern int acquire_lock(SEM_HANDLE sem);
99
extern int release_lock(SEM_HANDLE sem);
10+
extern int exist_lock(SEM_HANDLE sem);
1011

1112
void connect_shm_semlock_counters(int unlink, int force_connect, int release_lock);
1213
void delete_shm_semlock_counters_without_unlink(void);

Modules/_multiprocessing/semaphore.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1232,15 +1232,15 @@ _multiprocessing_SemLock__rebuild_impl(PyTypeObject *type, SEM_HANDLE handle,
12321232
static void
12331233
semlock_dealloc(SemLockObject* self)
12341234
{
1235-
int res = -1;
12361235

12371236
PyTypeObject *tp = Py_TYPE(self);
12381237
PyObject_GC_UnTrack(self);
12391238
if (self->handle != SEM_FAILED) {
12401239
SEM_CLOSE(self->handle);
12411240
}
12421241

1243-
#ifdef HAVE_BROKEN_SEM_GETVALUE
1242+
#ifdef HAVE_BROKEN_SEM_GETVALUE
1243+
int res = -1;
12441244
if (ISSEMAPHORE(self)) {
12451245
if (self->handle_mutex != SEM_FAILED) {
12461246
SEM_CLOSE(self->handle_mutex);

0 commit comments

Comments
 (0)