fix a legacy problem. make harbor service more stable

This commit is contained in:
Cloud Wu
2018-02-12 17:47:57 +08:00
committed by 云风
parent 484404295e
commit 0846a6533d
4 changed files with 21 additions and 9 deletions

View File

@@ -11,12 +11,15 @@
static struct skynet_context * REMOTE = 0;
static unsigned int HARBOR = ~0;
static inline int
invalid_type(int type) {
return type != PTYPE_SYSTEM && type != PTYPE_HARBOR;
}
void
skynet_harbor_send(struct remote_message *rmsg, uint32_t source, int session) {
int type = rmsg->sz >> MESSAGE_TYPE_SHIFT;
rmsg->sz &= MESSAGE_TYPE_MASK;
assert(type != PTYPE_SYSTEM && type != PTYPE_HARBOR && REMOTE);
skynet_context_send(REMOTE, rmsg, sizeof(*rmsg) , source, type , session);
assert(invalid_type(rmsg->type) && REMOTE);
skynet_context_send(REMOTE, rmsg, sizeof(*rmsg) , source, PTYPE_SYSTEM , session);
}
int

View File

@@ -16,6 +16,7 @@ struct remote_message {
struct remote_name destination;
const void * message;
size_t sz;
int type;
};
void skynet_harbor_send(struct remote_message *rmsg, uint32_t source, int session);

View File

@@ -718,7 +718,8 @@ skynet_send(struct skynet_context * context, uint32_t source, uint32_t destinati
struct remote_message * rmsg = skynet_malloc(sizeof(*rmsg));
rmsg->destination.handle = destination;
rmsg->message = data;
rmsg->sz = sz;
rmsg->sz = sz & MESSAGE_TYPE_MASK;
rmsg->type = sz >> MESSAGE_TYPE_SHIFT;
skynet_harbor_send(rmsg, source, session);
} else {
struct skynet_message smsg;
@@ -758,7 +759,8 @@ skynet_sendname(struct skynet_context * context, uint32_t source, const char * a
copy_name(rmsg->destination.name, addr);
rmsg->destination.handle = 0;
rmsg->message = data;
rmsg->sz = sz;
rmsg->sz = sz & MESSAGE_TYPE_MASK;
rmsg->type = sz >> MESSAGE_TYPE_SHIFT;
skynet_harbor_send(rmsg, source, session);
return session;