#include "rpc-port-parcel.h"
#include "parcel-internal.h"
+#include "port-internal.h"
#undef RPC_API
#define RPC_API extern "C" __attribute__((visibility("default")))
rpc_port_h port) {
int len;
unsigned char* buf;
- int ret;
- ret = rpc_port_read(port, &len, 4);
- if (ret != 0)
- return ret;
-
- buf = new unsigned char[len];
- ret = rpc_port_read(port, buf, len);
- if (ret != 0) {
- delete[] buf;
- return ret;
+ internal::Port* pt = static_cast<internal::Port*>(port);
+ {
+ std::lock_guard<std::recursive_mutex> lock(pt->GetMutex());
+ int ret = rpc_port_read(port, &len, 4);
+ if (ret != 0)
+ return ret;
+
+ buf = new unsigned char[len];
+ ret = rpc_port_read(port, buf, len);
+ if (ret != 0) {
+ delete[] buf;
+ return ret;
+ }
}
Parcel* p = new Parcel(buf, len);
RPC_API int rpc_port_parcel_send(rpc_port_parcel_h h, rpc_port_h port) {
Parcel* p = static_cast<Parcel*>(h);
int len = p->GetRaw().size();
- int ret;
if (len <= 0)
return -1;
- ret = rpc_port_write(port, &len, 4);
- if (ret != 0)
- return ret;
+ internal::Port* pt = static_cast<internal::Port*>(port);
+ {
+ std::lock_guard<std::recursive_mutex> lock(pt->GetMutex());
+ int ret = rpc_port_write(port, &len, 4);
+ if (ret != 0)
+ return ret;
- ret = rpc_port_write(port, &*(p->GetRaw().cbegin()), len);
- if (ret != 0)
- return ret;
+ ret = rpc_port_write(port, &*(p->GetRaw().cbegin()), len);
+ if (ret != 0)
+ return ret;
+ }
return 0;
}