222
221
mutex_spin_wait(mutex, file_name, line);
225
#ifdef UNIV_PFS_MUTEX
226
/******************************************************************//**
227
NOTE! Please use the corresponding macro mutex_enter(), not directly
229
This is a performance schema instrumented wrapper function for
230
mutex_enter_func(). */
233
pfs_mutex_enter_func(
234
/*=================*/
235
mutex_t* mutex, /*!< in: pointer to mutex */
236
const char* file_name, /*!< in: file name where locked */
237
ulint line) /*!< in: line where locked */
239
struct PSI_mutex_locker* locker = NULL;
240
PSI_mutex_locker_state state;
243
if (UNIV_LIKELY(PSI_server && mutex->pfs_psi)) {
244
locker = PSI_server->get_thread_mutex_locker(
245
&state, mutex->pfs_psi, PSI_MUTEX_LOCK);
247
PSI_server->start_mutex_wait(locker, file_name, line);
251
mutex_enter_func(mutex, file_name, line);
254
PSI_server->end_mutex_wait(locker, result);
257
/********************************************************************//**
258
NOTE! Please use the corresponding macro mutex_enter_nowait(), not directly
260
This is a performance schema instrumented wrapper function for
261
mutex_enter_nowait_func.
262
@return 0 if succeed, 1 if not */
265
pfs_mutex_enter_nowait_func(
266
/*========================*/
267
mutex_t* mutex, /*!< in: pointer to mutex */
268
const char* file_name, /*!< in: file name where mutex
270
ulint line) /*!< in: line where requested */
273
struct PSI_mutex_locker* locker = NULL;
274
PSI_mutex_locker_state state;
277
if (UNIV_LIKELY(PSI_server && mutex->pfs_psi)) {
278
locker = PSI_server->get_thread_mutex_locker(
279
&state, mutex->pfs_psi, PSI_MUTEX_LOCK);
281
PSI_server->start_mutex_wait(locker, file_name, line);
285
ret = mutex_enter_nowait_func(mutex, file_name, line);
288
PSI_server->end_mutex_wait(locker, result);
293
/******************************************************************//**
294
NOTE! Please use the corresponding macro mutex_exit(), not directly
296
A wrap function of mutex_exit_func() with performance schema instrumentation.
297
Unlocks a mutex owned by the current thread. */
302
mutex_t* mutex) /*!< in: pointer to mutex */
304
if (UNIV_LIKELY(PSI_server && mutex->pfs_psi)) {
305
PSI_server->unlock_mutex(mutex->pfs_psi);
308
mutex_exit_func(mutex);
311
/******************************************************************//**
312
NOTE! Please use the corresponding macro mutex_create(), not directly
314
A wrapper function for mutex_create_func(), registers the mutex
315
with performance schema if "UNIV_PFS_MUTEX" is defined when
316
creating the mutex */
319
pfs_mutex_create_func(
320
/*==================*/
321
mysql_pfs_key_t key, /*!< in: Performance Schema key */
322
mutex_t* mutex, /*!< in: pointer to memory */
324
const char* cmutex_name, /*!< in: mutex name */
325
# ifdef UNIV_SYNC_DEBUG
326
ulint level, /*!< in: level */
327
# endif /* UNIV_SYNC_DEBUG */
328
# endif /* UNIV_DEBUG */
329
const char* cfile_name, /*!< in: file name where created */
330
ulint cline) /*!< in: file line where created */
332
mutex->pfs_psi = (PSI_server && PFS_IS_INSTRUMENTED(key))
333
? PSI_server->init_mutex(key, mutex)
336
mutex_create_func(mutex,
339
# ifdef UNIV_SYNC_DEBUG
341
# endif /* UNIV_SYNC_DEBUG */
342
# endif /* UNIV_DEBUG */
346
/******************************************************************//**
347
NOTE! Please use the corresponding macro mutex_free(), not directly
349
Wrapper function for mutex_free_func(). Also destroys the performance
350
schema probes when freeing the mutex */
355
mutex_t* mutex) /*!< in: mutex */
357
if (UNIV_LIKELY(PSI_server && mutex->pfs_psi)) {
358
PSI_server->destroy_mutex(mutex->pfs_psi);
359
mutex->pfs_psi = NULL;
362
mutex_free_func(mutex);
365
#endif /* UNIV_PFS_MUTEX */