#include <bundle_cpp.h>
#include <bundle_internal.h>
#include <fcntl.h>
-#include <glib-unix.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
class ProcContext {
public:
ProcContext() {}
- ~ProcContext() {
- if (source_ != 0)
- g_source_remove(source_);
- }
+ ~ProcContext() {}
void SetName(std::string name) {
std::lock_guard<std::mutex> lock(mutex_);
void SetFd(int fd) {
std::lock_guard<std::mutex> lock(mutex_);
fd_.Set(fd);
- source_ = g_unix_fd_add(fd, G_IO_IN, UnixFdFunc, this);
}
void Close() {
}
private:
- void Reset() {
- std::lock_guard<std::mutex> lock(mutex_);
- name_ = "";
- fd_.Close();
- extra_ = tizen_base::Bundle();
- source_ = 0;
- }
-
- static gboolean UnixFdFunc(gint fd, GIOCondition condition,
- gpointer user_data) {
- auto* proc_context = static_cast<ProcContext*>(user_data);
-
- if (condition & G_IO_IN) {
- int ret = aul_sock_recv_result_with_fd(fd);
- if (ret != 0) {
- _E("Failed to receive result. fd(%d)", fd);
- proc_context->Reset();
- return G_SOURCE_REMOVE;
- }
- _D("Result(%d) received", ret);
- } else if (condition & (G_IO_ERR | G_IO_HUP | G_IO_NVAL)) {
- _E("Socket was disconnected. fd(%d)", fd);
- proc_context->Reset();
- return G_SOURCE_REMOVE;
- }
-
- return G_SOURCE_CONTINUE;
- }
-
- private:
FileDescriptor fd_;
std::string name_;
tizen_base::Bundle extra_;
mutable std::mutex mutex_;
- guint source_ = 0;
};
int ReadFromPath(const std::string& path, char* buf, size_t buf_size) {
return ret;
}
+ int res = aul_sock_recv_result_with_fd(ret);
+ if (res != 0) {
+ _E("Failed to receive the result. fd(%d)", ret);
+ close(ret);
+ return AUL_R_ERROR;
+ }
+
context.SetFd(ret);
context.SetName(name);
if (extra)