aboutsummaryrefslogtreecommitdiffhomepage
path: root/env_universal_common.h
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2014-04-29 11:28:00 -0700
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2014-04-29 11:28:00 -0700
commita949f0b0c3b3a257b93f87e4db05f0268582bb06 (patch)
tree1efc067bb3d92fb3ce3253330bdf1a424179b85a /env_universal_common.h
parentffc23046a2dd2963a5a434d86326b12f74bb1cee (diff)
Move universal variable callbacks out from under the lock, to avoid a
possible deadlock on reentrancy
Diffstat (limited to 'env_universal_common.h')
-rw-r--r--env_universal_common.h14
1 files changed, 8 insertions, 6 deletions
diff --git a/env_universal_common.h b/env_universal_common.h
index 26e5c633..769825ed 100644
--- a/env_universal_common.h
+++ b/env_universal_common.h
@@ -204,6 +204,8 @@ void enqueue_all(connection_t *c);
*/
void connection_destroy(connection_t *c);
+typedef std::vector<struct callback_data_t> callback_data_list_t;
+
/** Class representing universal variables */
class env_universal_t
{
@@ -218,10 +220,10 @@ class env_universal_t
mutable pthread_mutex_t lock;
bool tried_renaming;
- bool load_from_path(const wcstring &path);
- void load_from_fd(int fd);
+ bool load_from_path(const wcstring &path, callback_data_list_t *callbacks);
+ void load_from_fd(int fd, callback_data_list_t *callbacks);
- void parse_message_internal(wchar_t *msg, connection_t *src);
+ void parse_message_internal(wchar_t *msg, connection_t *src, callback_data_list_t *callbacks);
void set_internal(const wcstring &key, const wcstring &val, bool exportv, bool overwrite);
void remove_internal(const wcstring &name, bool overwrite);
@@ -235,7 +237,7 @@ class env_universal_t
/* File id from which we last read */
file_id_t last_read_file;
- void read_message_internal(connection_t *src);
+ void read_message_internal(connection_t *src, callback_data_list_t *callbacks);
void enqueue_all_internal(connection_t *c) const;
public:
@@ -264,10 +266,10 @@ public:
bool load();
/** Reads and writes variables at the correct path */
- bool sync();
+ bool sync(callback_data_list_t *callbacks);
/* Internal use */
- void read_message(connection_t *src);
+ void read_message(connection_t *src, callback_data_list_t *callbacks);
};
std::string get_machine_identifier();