@@ -80,6 +80,7 @@ Created 10/21/1995 Heikki Tuuri
80
80
81
81
#include < thread>
82
82
#include < chrono>
83
+ #include < memory>
83
84
84
85
/* Per-IO operation environment*/
85
86
class io_slots
@@ -133,8 +134,8 @@ class io_slots
133
134
}
134
135
};
135
136
136
- static io_slots * read_slots;
137
- static io_slots * write_slots;
137
+ static std::unique_ptr< io_slots> read_slots;
138
+ static std::unique_ptr< io_slots> write_slots;
138
139
139
140
/* * Number of retries for partial I/O's */
140
141
constexpr ulint NUM_RETRIES_ON_PARTIAL_IO = 10 ;
@@ -3744,6 +3745,10 @@ int os_aio_init()
3744
3745
int max_read_events= int (srv_n_read_io_threads *
3745
3746
OS_AIO_N_PENDING_IOS_PER_THREAD);
3746
3747
int max_events= max_read_events + max_write_events;
3748
+
3749
+ read_slots.reset (new io_slots (max_read_events, srv_n_read_io_threads));
3750
+ write_slots.reset (new io_slots (max_write_events, srv_n_write_io_threads));
3751
+
3747
3752
int ret;
3748
3753
#if LINUX_NATIVE_AIO
3749
3754
if (srv_use_native_aio && !is_linux_native_aio_supported ())
@@ -3774,22 +3779,21 @@ int os_aio_init()
3774
3779
}
3775
3780
#endif
3776
3781
3777
- if (! ret)
3782
+ if (ret)
3778
3783
{
3779
- read_slots= new io_slots (max_read_events, srv_n_read_io_threads );
3780
- write_slots= new io_slots (max_write_events, srv_n_write_io_threads );
3784
+ read_slots. reset ( );
3785
+ write_slots. reset ( );
3781
3786
}
3787
+
3782
3788
return ret;
3783
3789
}
3784
3790
3785
3791
3786
3792
void os_aio_free ()
3787
3793
{
3788
3794
srv_thread_pool->disable_aio ();
3789
- delete read_slots;
3790
- delete write_slots;
3791
- read_slots= nullptr ;
3792
- write_slots= nullptr ;
3795
+ read_slots.reset ();
3796
+ write_slots.reset ();
3793
3797
}
3794
3798
3795
3799
/* * Wait until there are no pending asynchronous writes. */
@@ -3879,7 +3883,7 @@ dberr_t os_aio(const IORequest &type, void *buf, os_offset_t offset, size_t n)
3879
3883
}
3880
3884
3881
3885
compile_time_assert (sizeof (IORequest) <= tpool::MAX_AIO_USERDATA_LEN);
3882
- io_slots* slots= type.is_read () ? read_slots : write_slots;
3886
+ io_slots* slots= type.is_read () ? read_slots. get () : write_slots. get () ;
3883
3887
tpool::aiocb* cb = slots->acquire ();
3884
3888
3885
3889
cb->m_buffer = buf;
0 commit comments