Skip to content

Commit 4d4ce59

Browse files
author
Sergei Golubchik
committed
compilation fixes for WITH_ATOMIC_OPS=rwlocks
1 parent efc93eb commit 4d4ce59

File tree

5 files changed

+9
-47
lines changed

5 files changed

+9
-47
lines changed

include/atomic/rwlock.h

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -41,51 +41,13 @@ typedef char my_atomic_rwlock_t;
4141

4242
typedef struct {pthread_mutex_t rw;} my_atomic_rwlock_t;
4343

44-
#ifndef SAFE_MUTEX
45-
46-
/*
47-
we're using read-write lock macros but map them to mutex locks, and they're
48-
faster. Still, having semantically rich API we can change the
49-
underlying implementation, if necessary.
50-
*/
5144
#define my_atomic_rwlock_destroy(name) pthread_mutex_destroy(& (name)->rw)
5245
#define my_atomic_rwlock_init(name) pthread_mutex_init(& (name)->rw, 0)
5346
#define my_atomic_rwlock_rdlock(name) pthread_mutex_lock(& (name)->rw)
5447
#define my_atomic_rwlock_wrlock(name) pthread_mutex_lock(& (name)->rw)
5548
#define my_atomic_rwlock_rdunlock(name) pthread_mutex_unlock(& (name)->rw)
5649
#define my_atomic_rwlock_wrunlock(name) pthread_mutex_unlock(& (name)->rw)
5750

58-
#else /* SAFE_MUTEX */
59-
60-
/*
61-
SAFE_MUTEX pollutes the compiling name space with macros
62-
that alter pthread_mutex_t, pthread_mutex_init, etc.
63-
Atomic operations should never use the safe mutex wrappers.
64-
Unfortunately, there is no way to have both:
65-
- safe mutex macros expanding pthread_mutex_lock to safe_mutex_lock
66-
- my_atomic macros expanding to unmodified pthread_mutex_lock
67-
inlined in the same compilation unit.
68-
So, in case of SAFE_MUTEX, a function call is required.
69-
Given that SAFE_MUTEX is a debugging facility,
70-
this extra function call is not a performance concern for
71-
production builds.
72-
*/
73-
C_MODE_START
74-
extern void plain_pthread_mutex_init(safe_mutex_t *);
75-
extern void plain_pthread_mutex_destroy(safe_mutex_t *);
76-
extern void plain_pthread_mutex_lock(safe_mutex_t *);
77-
extern void plain_pthread_mutex_unlock(safe_mutex_t *);
78-
C_MODE_END
79-
80-
#define my_atomic_rwlock_destroy(name) plain_pthread_mutex_destroy(&(name)->rw)
81-
#define my_atomic_rwlock_init(name) plain_pthread_mutex_init(&(name)->rw)
82-
#define my_atomic_rwlock_rdlock(name) plain_pthread_mutex_lock(&(name)->rw)
83-
#define my_atomic_rwlock_wrlock(name) plain_pthread_mutex_lock(&(name)->rw)
84-
#define my_atomic_rwlock_rdunlock(name) plain_pthread_mutex_unlock(&(name)->rw)
85-
#define my_atomic_rwlock_wrunlock(name) plain_pthread_mutex_unlock(&(name)->rw)
86-
87-
#endif /* SAFE_MUTEX */
88-
8951
#define MY_ATOMIC_MODE "mutex"
9052
#ifndef MY_ATOMIC_MODE_RWLOCKS
9153
#define MY_ATOMIC_MODE_RWLOCKS 1

sql/log.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4128,6 +4128,7 @@ int MYSQL_BIN_LOG::purge_first_log(Relay_log_info* rli, bool included)
41284128
included= 1;
41294129
to_purge_if_included= my_strdup(ir->name, MYF(0));
41304130
}
4131+
my_atomic_rwlock_destroy(&ir->inuse_relaylog_atomic_lock);
41314132
my_free(ir);
41324133
ir= next;
41334134
}

sql/rpl_parallel.cc

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
#include "rpl_mi.h"
55
#include "debug_sync.h"
66

7-
87
/*
98
Code for optional parallel execution of replicated events on the slave.
109
*/
@@ -844,9 +843,9 @@ handle_rpl_parallel_thread(void *arg)
844843
{
845844
if (last_ir)
846845
{
847-
my_atomic_rwlock_wrlock(&rli->inuse_relaylog_atomic_lock);
846+
my_atomic_rwlock_wrlock(&last_ir->inuse_relaylog_atomic_lock);
848847
my_atomic_add64(&last_ir->dequeued_count, accumulated_ir_count);
849-
my_atomic_rwlock_wrunlock(&rli->inuse_relaylog_atomic_lock);
848+
my_atomic_rwlock_wrunlock(&last_ir->inuse_relaylog_atomic_lock);
850849
accumulated_ir_count= 0;
851850
}
852851
last_ir= ir;
@@ -857,9 +856,9 @@ handle_rpl_parallel_thread(void *arg)
857856
}
858857
if (last_ir)
859858
{
860-
my_atomic_rwlock_wrlock(&rli->inuse_relaylog_atomic_lock);
859+
my_atomic_rwlock_wrlock(&last_ir->inuse_relaylog_atomic_lock);
861860
my_atomic_add64(&last_ir->dequeued_count, accumulated_ir_count);
862-
my_atomic_rwlock_wrunlock(&rli->inuse_relaylog_atomic_lock);
861+
my_atomic_rwlock_wrunlock(&last_ir->inuse_relaylog_atomic_lock);
863862
}
864863

865864
if ((events= rpt->event_queue) != NULL)

sql/rpl_rli.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ Relay_log_info::Relay_log_info(bool is_slave_recovery)
9292
mysql_cond_init(key_relay_log_info_start_cond, &start_cond, NULL);
9393
mysql_cond_init(key_relay_log_info_stop_cond, &stop_cond, NULL);
9494
mysql_cond_init(key_relay_log_info_log_space_cond, &log_space_cond, NULL);
95-
my_atomic_rwlock_init(&inuse_relaylog_atomic_lock);
9695
relay_log.init_pthread_objects();
9796
DBUG_VOID_RETURN;
9897
}
@@ -108,6 +107,7 @@ Relay_log_info::~Relay_log_info()
108107
{
109108
DBUG_ASSERT(cur->queued_count == cur->dequeued_count);
110109
inuse_relaylog *next= cur->next;
110+
my_atomic_rwlock_destroy(&cur->inuse_relaylog_atomic_lock);
111111
my_free(cur);
112112
cur= next;
113113
}
@@ -118,7 +118,6 @@ Relay_log_info::~Relay_log_info()
118118
mysql_cond_destroy(&start_cond);
119119
mysql_cond_destroy(&stop_cond);
120120
mysql_cond_destroy(&log_space_cond);
121-
my_atomic_rwlock_destroy(&inuse_relaylog_atomic_lock);
122121
relay_log.cleanup();
123122
DBUG_VOID_RETURN;
124123
}
@@ -1371,6 +1370,7 @@ Relay_log_info::alloc_inuse_relaylog(const char *name)
13711370
last_inuse_relaylog->next= ir;
13721371
}
13731372
last_inuse_relaylog= ir;
1373+
my_atomic_rwlock_init(&ir->inuse_relaylog_atomic_lock);
13741374

13751375
return 0;
13761376
}

sql/rpl_rli.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,6 @@ class Relay_log_info : public Slave_reporting_capability
170170
*/
171171
inuse_relaylog *inuse_relaylog_list;
172172
inuse_relaylog *last_inuse_relaylog;
173-
/* Lock used to protect inuse_relaylog::dequeued_count */
174-
my_atomic_rwlock_t inuse_relaylog_atomic_lock;
175173

176174
/*
177175
Needed to deal properly with cur_log getting closed and re-opened with
@@ -504,6 +502,8 @@ struct inuse_relaylog {
504502
/* Set when all events have been read from a relaylog. */
505503
bool completed;
506504
char name[FN_REFLEN];
505+
/* Lock used to protect inuse_relaylog::dequeued_count */
506+
my_atomic_rwlock_t inuse_relaylog_atomic_lock;
507507
};
508508

509509

0 commit comments

Comments
 (0)