struct ntpd_peer {
char *server;
- gint refcount;
+ int refcount;
};
struct ntpdate_task {
static void remove_peer(GList *peer_list, struct ntpd_peer *peer)
{
- if (!g_atomic_int_dec_and_test(&peer->refcount))
+ if (__sync_fetch_and_sub(&peer->refcount, 1) != 1)
return;
g_free(peer->server);
if ((peer = find_peer(pending_peers, server)) ||
(peer = find_peer(peers, server))) {
- g_atomic_int_inc(&peer->refcount);
+ __sync_fetch_and_add(&peer->refcount, 1);
return 0;
}
static guint install_watch = 0;
static guint uart_watch = 0;
-static gint install_count = 0;
+static int install_count = 0;
#define NCCS2 19
struct termios2 {
if (ioctl(uart_fd, TIOCSETD, &ldisc) < 0)
goto err;
- g_atomic_int_set(&install_count, 0);
+ install_count = 1;
+ __sync_synchronize();
return FALSE;
err:
- g_atomic_int_set(&install_count, 0);
+ install_count = 0;
+ __sync_synchronize();
+
g_io_channel_shutdown(channel, TRUE, NULL);
g_io_channel_unref(channel);
DBG("%d %p", install, uart_channel);
if (install == FALSE) {
- g_atomic_int_set(&install_count, 0);
+ install_count = 0;
+ __sync_synchronize();
if (uart_channel == NULL) {
DBG("UART channel is NULL");
uart_channel = NULL;
}
- g_atomic_int_set(&install_count, 0);
+ install_count = 0;
+ __sync_synchronize();
return 0;
}
return FALSE;
}
- if (g_atomic_int_get(&install_count) != 0) {
+ __sync_synchronize();
+ if (install_count != 0) {
status = g_io_channel_seek_position(channel, 0, G_SEEK_SET, NULL);
if (status != G_IO_STATUS_NORMAL) {
g_io_channel_shutdown(channel, TRUE, NULL);
return TRUE;
} else {
- g_atomic_int_set(&install_count, 1);
+ install_count = 1;
+ __sync_synchronize();
}
status = g_io_channel_seek_position(channel, 0, G_SEEK_SET, NULL);
if (install_ldisc(channel, install) < 0) {
connman_error("ldisc installation failed");
- g_atomic_int_set(&install_count, 0);
+ install_count = 0;
+ __sync_synchronize();
return TRUE;
}
install_event, NULL, NULL);
if (install_state) {
- g_atomic_int_set(&install_count, 1);
+ install_count = 1;
+ __sync_synchronize();
+
err = install_ldisc(install_channel, TRUE);
if (err < 0) {
connman_error("ldisc installtion failed");