static void
uninhibit_cb (DBusGProxy *proxy,
	      DBusGProxyCall *call_id,
	      RBGPMPlugin *plugin)
{
	GError *error = NULL;

	dbus_g_proxy_end_call (proxy,
			       call_id,
			       &error,
			       G_TYPE_INVALID);
	if (error != NULL) {
		if (!ignore_error (error)) {
			g_warning ("Failed to invoke %s.Inhibit: %s",
				   dbus_g_proxy_get_interface (proxy),
				   error->message);
		} else {
			rb_debug ("uninhibit failed: %s", error->message);
		}
		g_error_free (error);
	} else {
		rb_debug ("uninhibited");
		plugin->cookie = 0;
	}

	g_object_unref (plugin);
}
static gboolean
create_dbus_proxy (RBGPMPlugin *plugin)
{
	GError *error = NULL;

	if (plugin->proxy != NULL) {
		return TRUE;
	}

	/* try new name first */
	plugin->proxy = dbus_g_proxy_new_for_name_owner (plugin->bus,
						   "org.gnome.SessionManager",
						   "/org/gnome/SessionManager",
						   "org.gnome.SessionManager",
						   &error);
	if (error != NULL && ignore_error (error) == FALSE) {
		g_warning ("Failed to create dbus proxy for org.gnome.SessionManager: %s",
			   error->message);
		g_error_free (error);
		return FALSE;
	}

	g_signal_connect_object (plugin->proxy,
				 "destroy",
				 G_CALLBACK (proxy_destroy_cb),
				 plugin, 0);
	return TRUE;
}
Ejemplo n.º 3
0
static void sock_handle_write(int fd, void *data)
{
	if(!data) 
		return;
	
	int error = 0;
	struct mstate_write *wstate = data;
	assert(fd == wstate->fd);
	
	int size_need = wstate->size - wstate->offset;
	int size_write = write(fd, wstate->buf + wstate->offset, size_need);
	debug("sock_handle_write fd %d, offset %d, size %d\n", fd, wstate->offset, wstate->size);
	if(size_write == -1) {
		warning("sock_handle_write(%s)\n", strerror(errno));
		if(ignore_error(errno)) {
			sock_set_event(fd, SOCK_EVENT_WR);
			sock_register_event(fd, NULL, NULL, sock_handle_write, wstate);
		}
		else {
			error = 1;
			WPF *handle = wstate->callback;
			void *data = wstate->data;
			int res = wstate->offset;
			
			safe_free(wstate->buf);
			safe_free(wstate);
		
			handle(error, data, res);
		}
		return;
	}
	
	wstate->offset += size_write;

	if(wstate->offset < wstate->size)  {
		sock_set_event(fd, SOCK_EVENT_WR);
		sock_register_event(fd, NULL, NULL, sock_handle_write, wstate);
	}
	else {
		WPF *handle = wstate->callback;
		void *data = wstate->data;
		int res = wstate->offset;
		safe_free(wstate->buf);
		safe_free(wstate);
		
		handle(0, data, res);
	}
}
Ejemplo n.º 4
0
static void sock_handle_sendfile(int fd, void *data)
{
	int error = 0;
	struct fstate_write *fs = data;

	assert(fs->out_fd == fd);
	
	int size_need = fs->size - fs->size_sent;
	int size_write = sendfile(fs->out_fd, fs->in_fd, (off_t *)&fs->offset, size_need);
	int res = 0;

	if(size_write == -1) {
		warning("sock_handle_sendfile fd %d %s\n", fd, strerror(errno));

		if(ignore_error(errno))  {
			sock_set_event(fd, SOCK_EVENT_WR);
			sock_register_event(fd, NULL, NULL, sock_handle_sendfile, fs);
		}
		else {
			s_error("sock_handle_sendfile fd %d %s\n", fd, strerror(errno));
			error = 1;
			WPF *handle = fs->callback;
			void *data = fs->data;
			res = fs->size_sent;
			safe_free(fs);

			handle(error, data, res);
		}
		return;
	}

	fs->size_sent += size_write;

	if(fs->size_sent < fs->size) {
		sock_set_event(fd, SOCK_EVENT_WR);
		sock_register_event(fd, NULL, NULL, sock_handle_sendfile, fs);
	}
	else {
		WPF *handle = fs->callback;
		res = fs->size_sent;
		void *data = fs->data;
		safe_free(fs);

		handle(error, data, res);
	}
}