summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/os_calls.c38
-rw-r--r--common/os_calls.h4
2 files changed, 37 insertions, 5 deletions
diff --git a/common/os_calls.c b/common/os_calls.c
index 9d359039..251e1f37 100644
--- a/common/os_calls.c
+++ b/common/os_calls.c
@@ -619,15 +619,17 @@ g_tcp_select(int sck1, int sck2)
tbus APP_CC
g_create_wait_obj(char* name)
{
+#ifdef _WIN32
tbus obj;
-#ifdef _WIN32
obj = (tbus)CreateEvent(0, 1, 0, name);
return obj;
#else
+ tbus obj;
struct sockaddr_un sa;
int len;
int sck;
+ int i;
sck = socket(PF_UNIX, SOCK_DGRAM, 0);
if (sck < 0)
@@ -636,7 +638,20 @@ g_create_wait_obj(char* name)
}
memset(&sa, 0, sizeof(sa));
sa.sun_family = AF_UNIX;
- sprintf(sa.sun_path, "/tmp/%s", name);
+ if ((name == 0) || (strlen(name) == 0))
+ {
+ g_random((char*)&i, sizeof(i));
+ sprintf(sa.sun_path, "/tmp/auto%8.8x", i);
+ while (g_file_exist(sa.sun_path))
+ {
+ g_random((char*)&i, sizeof(i));
+ sprintf(sa.sun_path, "/tmp/auto%8.8x", i);
+ }
+ }
+ else
+ {
+ sprintf(sa.sun_path, "/tmp/%s", name);
+ }
unlink(sa.sun_path);
len = sizeof(sa);
if (bind(sck, (struct sockaddr*)&sa, len) < 0)
@@ -650,6 +665,7 @@ g_create_wait_obj(char* name)
}
/*****************************************************************************/
+/* returns 0 on error */
tbus APP_CC
g_create_wait_obj_from_socket(tbus socket, int write)
{
@@ -674,6 +690,20 @@ g_create_wait_obj_from_socket(tbus socket, int write)
}
/*****************************************************************************/
+void APP_CC
+g_delete_wait_obj_from_socket(tbus wait_obj)
+{
+#ifdef _WIN32
+ if (wait_obj == 0)
+ {
+ return;
+ }
+ WSACloseEvent((HANDLE)wait_obj);
+#else
+#endif
+}
+
+/*****************************************************************************/
/* returns error */
int APP_CC
g_set_wait_obj(tbus obj)
@@ -769,7 +799,7 @@ g_is_wait_obj_set(tbus obj)
/*****************************************************************************/
/* returns error */
int APP_CC
-g_destroy_wait_obj(tbus obj)
+g_delete_wait_obj(tbus obj)
{
#ifdef _WIN32
if (obj == 0)
@@ -777,7 +807,7 @@ g_destroy_wait_obj(tbus obj)
return 0;
}
/* Close event handle */
- WSACloseEvent((HANDLE)obj);
+ CloseHandle((HANDLE)obj);
return 0;
#else
socklen_t sa_size;
diff --git a/common/os_calls.h b/common/os_calls.h
index e46ffa36..73dde4b2 100644
--- a/common/os_calls.h
+++ b/common/os_calls.h
@@ -97,6 +97,8 @@ tbus APP_CC
g_create_wait_obj(char* name);
tbus APP_CC
g_create_wait_obj_from_socket(tbus socket, int write);
+void APP_CC
+g_delete_wait_obj_from_socket(tbus wait_obj);
int APP_CC
g_set_wait_obj(tbus obj);
int APP_CC
@@ -104,7 +106,7 @@ g_reset_wait_obj(tbus obj);
int APP_CC
g_is_wait_obj_set(tbus obj);
int APP_CC
-g_destroy_wait_obj(tbus obj);
+g_delete_wait_obj(tbus obj);
int APP_CC
g_obj_wait(tbus* read_objs, int rcount, tbus* write_objs, int wcount,
int mstimeout);