mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-22 02:53:09 +00:00
fix a legacy problem. make harbor service more stable
This commit is contained in:
@@ -690,21 +690,27 @@ mainloop(struct skynet_context * context, void * ud, int type, int session, uint
|
|||||||
harbor_command(h, msg,sz,session,source);
|
harbor_command(h, msg,sz,session,source);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
default: {
|
case PTYPE_SYSTEM : {
|
||||||
// remote message out
|
// remote message out
|
||||||
const struct remote_message *rmsg = msg;
|
const struct remote_message *rmsg = msg;
|
||||||
if (rmsg->destination.handle == 0) {
|
if (rmsg->destination.handle == 0) {
|
||||||
if (remote_send_name(h, source , rmsg->destination.name, type, session, rmsg->message, rmsg->sz)) {
|
if (remote_send_name(h, source , rmsg->destination.name, rmsg->type, session, rmsg->message, rmsg->sz)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (remote_send_handle(h, source , rmsg->destination.handle, type, session, rmsg->message, rmsg->sz)) {
|
if (remote_send_handle(h, source , rmsg->destination.handle, rmsg->type, session, rmsg->message, rmsg->sz)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
skynet_free((void *)rmsg->message);
|
skynet_free((void *)rmsg->message);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
default:
|
||||||
|
skynet_error(context, "recv invalid message from %x, type = %d", source, type);
|
||||||
|
if (session != 0) {
|
||||||
|
skynet_send(context,0,source,PTYPE_ERROR, session, NULL, 0);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,12 +11,15 @@
|
|||||||
static struct skynet_context * REMOTE = 0;
|
static struct skynet_context * REMOTE = 0;
|
||||||
static unsigned int HARBOR = ~0;
|
static unsigned int HARBOR = ~0;
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
invalid_type(int type) {
|
||||||
|
return type != PTYPE_SYSTEM && type != PTYPE_HARBOR;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
skynet_harbor_send(struct remote_message *rmsg, uint32_t source, int session) {
|
skynet_harbor_send(struct remote_message *rmsg, uint32_t source, int session) {
|
||||||
int type = rmsg->sz >> MESSAGE_TYPE_SHIFT;
|
assert(invalid_type(rmsg->type) && REMOTE);
|
||||||
rmsg->sz &= MESSAGE_TYPE_MASK;
|
skynet_context_send(REMOTE, rmsg, sizeof(*rmsg) , source, PTYPE_SYSTEM , session);
|
||||||
assert(type != PTYPE_SYSTEM && type != PTYPE_HARBOR && REMOTE);
|
|
||||||
skynet_context_send(REMOTE, rmsg, sizeof(*rmsg) , source, type , session);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ struct remote_message {
|
|||||||
struct remote_name destination;
|
struct remote_name destination;
|
||||||
const void * message;
|
const void * message;
|
||||||
size_t sz;
|
size_t sz;
|
||||||
|
int type;
|
||||||
};
|
};
|
||||||
|
|
||||||
void skynet_harbor_send(struct remote_message *rmsg, uint32_t source, int session);
|
void skynet_harbor_send(struct remote_message *rmsg, uint32_t source, int session);
|
||||||
|
|||||||
@@ -718,7 +718,8 @@ skynet_send(struct skynet_context * context, uint32_t source, uint32_t destinati
|
|||||||
struct remote_message * rmsg = skynet_malloc(sizeof(*rmsg));
|
struct remote_message * rmsg = skynet_malloc(sizeof(*rmsg));
|
||||||
rmsg->destination.handle = destination;
|
rmsg->destination.handle = destination;
|
||||||
rmsg->message = data;
|
rmsg->message = data;
|
||||||
rmsg->sz = sz;
|
rmsg->sz = sz & MESSAGE_TYPE_MASK;
|
||||||
|
rmsg->type = sz >> MESSAGE_TYPE_SHIFT;
|
||||||
skynet_harbor_send(rmsg, source, session);
|
skynet_harbor_send(rmsg, source, session);
|
||||||
} else {
|
} else {
|
||||||
struct skynet_message smsg;
|
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);
|
copy_name(rmsg->destination.name, addr);
|
||||||
rmsg->destination.handle = 0;
|
rmsg->destination.handle = 0;
|
||||||
rmsg->message = data;
|
rmsg->message = data;
|
||||||
rmsg->sz = sz;
|
rmsg->sz = sz & MESSAGE_TYPE_MASK;
|
||||||
|
rmsg->type = sz >> MESSAGE_TYPE_SHIFT;
|
||||||
|
|
||||||
skynet_harbor_send(rmsg, source, session);
|
skynet_harbor_send(rmsg, source, session);
|
||||||
return session;
|
return session;
|
||||||
|
|||||||
Reference in New Issue
Block a user