am c1b97e05: (-s ours) do not merge. Fix a race in system properties.

* commit 'c1b97e05b0aee92b249a93e53b3f8151fcb74287':
  do not merge. Fix a race in system properties.
diff --git a/libcutils/properties.c b/libcutils/properties.c
index 98f356b..547cc6d 100644
--- a/libcutils/properties.c
+++ b/libcutils/properties.c
@@ -31,9 +31,47 @@
 #define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
 #include <sys/_system_properties.h>
 
+static int send_prop_msg(prop_msg *msg)
+{
+    int s;
+    int r;
+    
+    s = socket_local_client(PROP_SERVICE_NAME, 
+                            ANDROID_SOCKET_NAMESPACE_RESERVED,
+                            SOCK_STREAM);
+    if(s < 0) return -1;
+    
+    while((r = send(s, msg, sizeof(prop_msg), 0)) < 0) {
+        if((errno == EINTR) || (errno == EAGAIN)) continue;
+        break;
+    }
+
+    if(r == sizeof(prop_msg)) {
+        r = 0;
+    } else {
+        r = -1;
+    }
+
+    close(s);
+    return r;
+}
+
 int property_set(const char *key, const char *value)
 {
-    return __system_property_set(key, value);
+    prop_msg msg;
+    unsigned resp;
+
+    if(key == 0) return -1;
+    if(value == 0) value = "";
+    
+    if(strlen(key) >= PROP_NAME_MAX) return -1;
+    if(strlen(value) >= PROP_VALUE_MAX) return -1;
+    
+    msg.cmd = PROP_MSG_SETPROP;
+    strcpy((char*) msg.name, key);
+    strcpy((char*) msg.value, value);
+
+    return send_prop_msg(&msg);
 }
 
 int property_get(const char *key, char *value, const char *default_value)