mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-26 21:03:12 +00:00
Make universal_notifier_t use unique_ptr instead of raw pointers
This commit is contained in:
parent
f0065cda13
commit
6f745762bb
3 changed files with 13 additions and 20 deletions
|
@ -1357,22 +1357,22 @@ universal_notifier_t::notifier_strategy_t universal_notifier_t::resolve_default_
|
||||||
}
|
}
|
||||||
|
|
||||||
universal_notifier_t &universal_notifier_t::default_notifier() {
|
universal_notifier_t &universal_notifier_t::default_notifier() {
|
||||||
static universal_notifier_t *result =
|
static std::unique_ptr<universal_notifier_t> result =
|
||||||
new_notifier_for_strategy(universal_notifier_t::resolve_default_strategy());
|
new_notifier_for_strategy(universal_notifier_t::resolve_default_strategy());
|
||||||
return *result;
|
return *result;
|
||||||
}
|
}
|
||||||
|
|
||||||
universal_notifier_t *universal_notifier_t::new_notifier_for_strategy(
|
std::unique_ptr<universal_notifier_t> universal_notifier_t::new_notifier_for_strategy(
|
||||||
universal_notifier_t::notifier_strategy_t strat, const wchar_t *test_path) {
|
universal_notifier_t::notifier_strategy_t strat, const wchar_t *test_path) {
|
||||||
switch (strat) {
|
switch (strat) {
|
||||||
case strategy_notifyd: {
|
case strategy_notifyd: {
|
||||||
return new universal_notifier_notifyd_t();
|
return make_unique<universal_notifier_notifyd_t>();
|
||||||
}
|
}
|
||||||
case strategy_shmem_polling: {
|
case strategy_shmem_polling: {
|
||||||
return new universal_notifier_shmem_poller_t();
|
return make_unique<universal_notifier_shmem_poller_t>();
|
||||||
}
|
}
|
||||||
case strategy_named_pipe: {
|
case strategy_named_pipe: {
|
||||||
return new universal_notifier_named_pipe_t(test_path);
|
return make_unique<universal_notifier_named_pipe_t>(test_path);
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
debug(0, "Unsupported universal notifier strategy %d\n", strat);
|
debug(0, "Unsupported universal notifier strategy %d\n", strat);
|
||||||
|
|
|
@ -135,9 +135,9 @@ class universal_notifier_t {
|
||||||
static notifier_strategy_t resolve_default_strategy();
|
static notifier_strategy_t resolve_default_strategy();
|
||||||
virtual ~universal_notifier_t();
|
virtual ~universal_notifier_t();
|
||||||
|
|
||||||
// Factory constructor. Free with delete.
|
// Factory constructor.
|
||||||
static universal_notifier_t *new_notifier_for_strategy(notifier_strategy_t strat,
|
static std::unique_ptr<universal_notifier_t> new_notifier_for_strategy(notifier_strategy_t strat,
|
||||||
const wchar_t *test_path = NULL);
|
const wchar_t *test_path = NULL);
|
||||||
|
|
||||||
// Default instance. Other instances are possible for testing.
|
// Default instance. Other instances are possible for testing.
|
||||||
static universal_notifier_t &default_notifier();
|
static universal_notifier_t &default_notifier();
|
||||||
|
|
|
@ -532,12 +532,12 @@ static int test_iothread_thread_call(int *addr) {
|
||||||
|
|
||||||
static void test_iothread(void) {
|
static void test_iothread(void) {
|
||||||
say(L"Testing iothreads");
|
say(L"Testing iothreads");
|
||||||
int *int_ptr = new int(0);
|
std::unique_ptr<int> int_ptr = make_unique<int>(0);
|
||||||
int iterations = 50000;
|
int iterations = 50000;
|
||||||
int max_achieved_thread_count = 0;
|
int max_achieved_thread_count = 0;
|
||||||
double start = timef();
|
double start = timef();
|
||||||
for (int i = 0; i < iterations; i++) {
|
for (int i = 0; i < iterations; i++) {
|
||||||
int thread_count = iothread_perform(test_iothread_thread_call, int_ptr);
|
int thread_count = iothread_perform(test_iothread_thread_call, int_ptr.get());
|
||||||
max_achieved_thread_count = std::max(max_achieved_thread_count, thread_count);
|
max_achieved_thread_count = std::max(max_achieved_thread_count, thread_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -552,8 +552,6 @@ static void test_iothread(void) {
|
||||||
|
|
||||||
say(L" (%.02f msec, with max of %d threads)", (end - start) * 1000.0,
|
say(L" (%.02f msec, with max of %d threads)", (end - start) * 1000.0,
|
||||||
max_achieved_thread_count);
|
max_achieved_thread_count);
|
||||||
|
|
||||||
delete int_ptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static parser_test_error_bits_t detect_argument_errors(const wcstring &src) {
|
static parser_test_error_bits_t detect_argument_errors(const wcstring &src) {
|
||||||
|
@ -2553,7 +2551,7 @@ static void test_universal_callbacks() {
|
||||||
if (system("rm -Rf /tmp/fish_uvars_test")) err(L"rm failed");
|
if (system("rm -Rf /tmp/fish_uvars_test")) err(L"rm failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool poll_notifier(universal_notifier_t *note) {
|
bool poll_notifier(const std::unique_ptr<universal_notifier_t> ¬e) {
|
||||||
bool result = false;
|
bool result = false;
|
||||||
if (note->usec_delay_between_polls() > 0) {
|
if (note->usec_delay_between_polls() > 0) {
|
||||||
result = note->poll();
|
result = note->poll();
|
||||||
|
@ -2591,7 +2589,7 @@ static void trigger_or_wait_for_notification(universal_notifier_t::notifier_stra
|
||||||
|
|
||||||
static void test_notifiers_with_strategy(universal_notifier_t::notifier_strategy_t strategy) {
|
static void test_notifiers_with_strategy(universal_notifier_t::notifier_strategy_t strategy) {
|
||||||
say(L"Testing universal notifiers with strategy %d", (int)strategy);
|
say(L"Testing universal notifiers with strategy %d", (int)strategy);
|
||||||
universal_notifier_t *notifiers[16];
|
std::unique_ptr<universal_notifier_t> notifiers[16];
|
||||||
size_t notifier_count = sizeof notifiers / sizeof *notifiers;
|
size_t notifier_count = sizeof notifiers / sizeof *notifiers;
|
||||||
|
|
||||||
// Populate array of notifiers.
|
// Populate array of notifiers.
|
||||||
|
@ -2625,7 +2623,7 @@ static void test_notifiers_with_strategy(universal_notifier_t::notifier_strategy
|
||||||
if (!poll_notifier(notifiers[i])) {
|
if (!poll_notifier(notifiers[i])) {
|
||||||
err(L"Universal variable notifier (%lu) %p polled failed to notice changes, with "
|
err(L"Universal variable notifier (%lu) %p polled failed to notice changes, with "
|
||||||
L"strategy %d",
|
L"strategy %d",
|
||||||
i, notifiers[i], (int)strategy);
|
i, notifiers[i].get(), (int)strategy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2648,11 +2646,6 @@ static void test_notifiers_with_strategy(universal_notifier_t::notifier_strategy
|
||||||
(int)strategy);
|
(int)strategy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clean up.
|
|
||||||
for (size_t i = 0; i < notifier_count; i++) {
|
|
||||||
delete notifiers[i];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_universal_notifiers() {
|
static void test_universal_notifiers() {
|
||||||
|
|
Loading…
Reference in a new issue