Protect analytics set data (#16929)
Stelios Fragkakis committed
Feb 5, 2024 at 13:43 UTC
4299ff70891ca142411c663aaa8420707f2ad9fb
2 files changed
+7
daemon/analytics.c
+6
@@ -116,12 +116,14 @@ void analytics_free_data(void)
116
*/
117
void analytics_set_data(char **name, char *value)
118
{
119
+ spinlock_lock(&analytics_data.spinlock);
120
if (*name) {
121
analytics_data.data_length -= strlen(*name);
122
freez(*name);
123
}
124
*name = strdupz(value);
125
analytics_data.data_length += strlen(*name);
126
+ spinlock_unlock(&analytics_data.spinlock);
127
}
128
129
/*
@@ -130,6 +132,7 @@ void analytics_set_data(char **name, char *value)
132
void analytics_set_data_str(char **name, const char *value)
133
{
134
size_t value_string_len;
135
+ spinlock_lock(&analytics_data.spinlock);
136
if (*name) {
137
analytics_data.data_length -= strlen(*name);
138
freez(*name);
@@ -138,6 +141,7 @@ void analytics_set_data_str(char **name, const char *value)
141
*name = mallocz(sizeof(char) * value_string_len);
142
snprintfz(*name, value_string_len - 1, "\"%s\"", value);
143
analytics_data.data_length += strlen(*name);
144
+ spinlock_unlock(&analytics_data.spinlock);
145
}
146
147
/*
@@ -466,6 +470,8 @@ void analytics_alarms(void)
470
*/
471
void analytics_misc(void)
472
{
473
+ analytics_data.spinlock.locked = false;
474
+
475
#ifdef ENABLE_ACLK
476
analytics_set_data(&analytics_data.netdata_host_cloud_available, "true");
477
analytics_set_data_str(&analytics_data.netdata_host_aclk_implementation, "Next Generation");
daemon/analytics.h
+1
@@ -71,6 +71,7 @@ struct analytics_data {
71
72
size_t charts_count;
73
size_t metrics_count;
74
+ SPINLOCK spinlock;
75
76
bool exporting_enabled;
77
};