treewide: rework mutex

Wrap mutex calls with traceable messages to help debugging resource locks.

[cleanup commit message]
Signed-off-by: Nick Hainke <vincent@systemli.org>
This commit is contained in:
Ian Clowes 2022-01-31 10:54:38 +00:00 committed by Nick Hainke
parent 0a962bea1f
commit be49c35686
6 changed files with 76 additions and 46 deletions

View file

@ -229,11 +229,11 @@ int handle_deauth_req(struct blob_attr* msg) {
dawnlog_debug_func("Entering...");
pthread_mutex_lock(&client_array_mutex);
dawn_mutex_lock(&client_array_mutex);
client_array_delete_bc(notify_req.bssid_addr, notify_req.client_addr);
pthread_mutex_unlock(&client_array_mutex);
dawn_mutex_unlock(&client_array_mutex);
dawnlog_debug("[WC] Deauth: %s\n", "deauth");
@ -434,7 +434,7 @@ dump_client(struct blob_attr** tb, struct dawn_mac client_addr, const char* bssi
memset(client_entry->signature, 0, SIGNATURE_LEN);
}
pthread_mutex_lock(&client_array_mutex);
dawn_mutex_lock(&client_array_mutex);
// If entry was already in list we get back the old entry, which needs to be freed
client* prev_entry = client_array_update_entry(client_entry, time(0));
if (prev_entry)
@ -443,7 +443,7 @@ dump_client(struct blob_attr** tb, struct dawn_mac client_addr, const char* bssi
prev_entry = NULL;
}
pthread_mutex_unlock(&client_array_mutex);
dawn_mutex_unlock(&client_array_mutex);
}
static int

View file

@ -346,14 +346,14 @@ bool discard_entry = true;
dawnlog_trace("Allow authentication due to mac_in_maclist()");
}
else {
pthread_mutex_lock(&probe_array_mutex);
dawn_mutex_lock(&probe_array_mutex);
if (dawnlog_showing(DAWNLOG_DEBUG))
print_probe_array();
probe_entry *tmp = probe_array_get_entry(auth_req->client_addr, auth_req->bssid_addr);
pthread_mutex_unlock(&probe_array_mutex);
dawn_mutex_unlock(&probe_array_mutex);
/*** Deprecated function decide_function() removed here ***/
int deny_request = 0;
@ -418,14 +418,14 @@ int discard_entry = true;
else if (mac_find_entry(assoc_req->client_addr)) {
dawnlog_trace("Allow association due to mac_in_maclist()");
} else {
pthread_mutex_lock(&probe_array_mutex);
dawn_mutex_lock(&probe_array_mutex);
if (dawnlog_showing(DAWNLOG_DEBUG))
print_probe_array();
probe_entry *tmp = probe_array_get_entry(assoc_req->client_addr, assoc_req->bssid_addr);
pthread_mutex_unlock(&probe_array_mutex);
dawn_mutex_unlock(&probe_array_mutex);
/*** Deprecated function decide_function() removed here ***/
int deny_request = 0;
@ -547,11 +547,11 @@ static int handle_beacon_rep(struct blob_attr *msg) {
else
{
// Update RxxI of current entry if it exists
pthread_mutex_lock(&probe_array_mutex);
dawn_mutex_lock(&probe_array_mutex);
probe_entry* entry_updated = probe_array_update_rcpi_rsni(entry->client_addr, entry->bssid_addr, entry->rcpi, entry->rsni, true);
pthread_mutex_unlock(&probe_array_mutex);
dawn_mutex_unlock(&probe_array_mutex);
if (entry_updated)
{
@ -1726,7 +1726,7 @@ int build_hearing_map_sort_client(struct blob_buf *b) {
if (dawnlog_showing(DAWNLOG_DEBUG))
print_probe_array();
pthread_mutex_lock(&probe_array_mutex);
dawn_mutex_lock(&probe_array_mutex);
void *client_list, *ap_list, *ssid_list;
char ap_mac_buf[20];
@ -1801,7 +1801,7 @@ int build_hearing_map_sort_client(struct blob_buf *b) {
same_ssid = true;
}
pthread_mutex_unlock(&probe_array_mutex);
dawn_mutex_unlock(&probe_array_mutex);
return 0;
}
@ -1872,7 +1872,7 @@ int build_network_overview(struct blob_buf *b) {
blobmsg_add_rrm_string(b, "rrm-caps", k->rrm_enabled_capa);
pthread_mutex_lock(&probe_array_mutex);
dawn_mutex_lock(&probe_array_mutex);
probe_entry* n = probe_array_get_entry(k->client_addr, k->bssid_addr);
if (n != NULL) {
@ -1882,7 +1882,7 @@ int build_network_overview(struct blob_buf *b) {
blobmsg_add_u32(b, "rsni", n->rsni);
}
}
pthread_mutex_unlock(&probe_array_mutex);
dawn_mutex_unlock(&probe_array_mutex);
blobmsg_close_table(b, client_list);
@ -1949,7 +1949,7 @@ int ap_get_nr(struct blob_buf *b_local, struct dawn_mac own_bssid_addr, const ch
if (own_ap->freq <= max_band_freq[band])
break;
}
pthread_mutex_lock(&ap_array_mutex);
dawn_mutex_lock(&ap_array_mutex);
for (i = ap_set; i != NULL; i = i->next_ap) {
if (i != own_ap && !strncmp((char *)i->ssid, ssid, SSID_MAX_LEN) &&
!mac_is_in_entry_list(i->bssid_addr, preferred_list))
@ -1957,7 +1957,7 @@ int ap_get_nr(struct blob_buf *b_local, struct dawn_mac own_bssid_addr, const ch
blobmsg_add_nr(b_local, i);
}
}
pthread_mutex_unlock(&ap_array_mutex);
dawn_mutex_unlock(&ap_array_mutex);
for (n = preferred_list; n; n = n->next_mac) {
if ((i = ap_array_get_ap(n->mac)))
@ -1979,9 +1979,9 @@ void uloop_add_data_cbs() {
void remove_probe_array_cb(struct uloop_timeout* t) {
dawnlog_debug_func("[Thread] : Removing old probe entries!\n");
pthread_mutex_lock(&probe_array_mutex);
dawn_mutex_lock(&probe_array_mutex);
remove_old_probe_entries(time(0), timeout_config.remove_probe);
pthread_mutex_unlock(&probe_array_mutex);
dawn_mutex_unlock(&probe_array_mutex);
dawnlog_debug("[Thread] : Removing old entries finished!\n");
@ -1993,10 +1993,10 @@ void remove_probe_array_cb(struct uloop_timeout* t) {
void remove_client_array_cb(struct uloop_timeout* t) {
dawnlog_debug_func("Entering...");
pthread_mutex_lock(&client_array_mutex);
dawn_mutex_lock(&client_array_mutex);
dawnlog_debug("[Thread] : Removing old client entries!\n");
remove_old_client_entries(time(0), timeout_config.update_client);
pthread_mutex_unlock(&client_array_mutex);
dawn_mutex_unlock(&client_array_mutex);
uloop_timeout_set(&client_timeout, timeout_config.update_client * 1000);
}
@ -2005,10 +2005,10 @@ void remove_client_array_cb(struct uloop_timeout* t) {
void remove_ap_array_cb(struct uloop_timeout* t) {
dawnlog_debug_func("Entering...");
pthread_mutex_lock(&ap_array_mutex);
dawn_mutex_lock(&ap_array_mutex);
dawnlog_debug("[ULOOP] : Removing old ap entries!\n");
remove_old_ap_entries(time(0), timeout_config.remove_ap);
pthread_mutex_unlock(&ap_array_mutex);
dawn_mutex_unlock(&ap_array_mutex);
uloop_timeout_set(&ap_timeout, timeout_config.remove_ap * 1000);
}

View file

@ -5,6 +5,7 @@
#include <stdarg.h>
#include <syslog.h>
#include <stdio.h>
#include <inttypes.h>
#include "utils.h"
@ -128,3 +129,15 @@ const char* dawnlog_basename(const char* file)
return(xfile ? xfile + 1 : file);
}
int _dawn_mutex_lock(pthread_mutex_t* m, char * f, int l)
{
dawnlog_debug("MUTEX lock = %" PRIXPTR "@%s:%d", m, dawnlog_basename(f), l);
return pthread_mutex_lock(m);
}
int _dawn_mutex_unlock(pthread_mutex_t* m, char* f, int l)
{
dawnlog_debug("MUTEX unlock = %" PRIXPTR "@%s:%d", m, dawnlog_basename(f), l);
return pthread_mutex_unlock(m);
}