}
//-----------------------------------------------------------------------------
-int msg_start(struct msg_buf_t *data, struct user_space_inst_t *us_inst, struct msg_t **msg)
+int msg_start(struct msg_buf_t *data, struct user_space_inst_t *us_inst,
+ struct msg_t **msg, enum ErrorCode *err)
{
char *p = NULL;
*msg = NULL;
if (!parse_app_inst_list(data, &us_inst->app_num, &us_inst->app_inst_list)) {
+ *err = ERR_WRONG_MESSAGE_FORMAT;
LOGE("parse app inst\n");
return 1;
}
p = (char *)*msg;
pack_int32(p, NMSG_START);
} else {
+ *err = ERR_CANNOT_START_PROFILING;
return 1;
}
return 0;
}
-int msg_swap_inst_add(struct msg_buf_t *data, struct user_space_inst_t *us_inst, struct msg_t **msg)
+int msg_swap_inst_add(struct msg_buf_t *data, struct user_space_inst_t *us_inst,
+ struct msg_t **msg, enum ErrorCode *err)
{
uint32_t lib_num = 0;
char *p = NULL;
+ *err = ERR_UNKNOWN;
+
if (!parse_lib_inst_list(data, &lib_num, &us_inst->lib_inst_list)) {
+ *err = ERR_WRONG_MESSAGE_FORMAT;
LOGE("parse lib inst list fail\n");
return 1;
}
// free new_list
free_data_list((struct data_list_t **)&new_lib_inst_list);
new_lib_inst_list = NULL;
+ *err = ERR_NO;
return 0;
}
-int msg_swap_inst_remove(struct msg_buf_t *data, struct user_space_inst_t *us_inst, struct msg_t **msg)
+int msg_swap_inst_remove(struct msg_buf_t *data, struct user_space_inst_t *us_inst,
+ struct msg_t **msg, enum ErrorCode *err)
{
uint32_t lib_num = 0;
char *p = NULL;
+ *err = ERR_UNKNOWN;
if (!parse_lib_inst_list(data, &lib_num, &new_lib_inst_list)) {
+ *err = ERR_WRONG_MESSAGE_FORMAT;
LOGE("parse lib inst\n");
return 1;
}
free_data_list((struct data_list_t **)&new_lib_inst_list);
new_lib_inst_list = NULL;
+ *err = ERR_NO;
return 0;
}
typedef int (cmp_data_f) (struct data_list_t *el_1, struct data_list_t *el_2);
typedef char *(*pack_head_t) (char *to, void *data);
-extern int msg_swap_inst_remove(struct msg_buf_t *data, struct user_space_inst_t *us_inst, struct msg_t **msg);
-extern int msg_swap_inst_add(struct msg_buf_t *data, struct user_space_inst_t *us_inst, struct msg_t **msg);
-extern int msg_start(struct msg_buf_t *data, struct user_space_inst_t *us_inst, struct msg_t **msg);
+extern int msg_swap_inst_remove(struct msg_buf_t *data, struct user_space_inst_t *us_inst,
+ struct msg_t **msg, enum ErrorCode *err);
+extern int msg_swap_inst_add(struct msg_buf_t *data, struct user_space_inst_t *us_inst,
+ struct msg_t **msg, enum ErrorCode *err);
+extern int msg_start(struct msg_buf_t *data, struct user_space_inst_t *us_inst,
+ struct msg_t **msg, enum ErrorCode *err);
struct probe_list_t *new_probe();
struct lib_list_t *new_lib();
//copy payload data
memcpy(p, payload, payload_size);
- LOGI("ACK (%s) errcode<%s> payload=%d; size=%d\n", msg_ID_str(resp),
+ LOGI("ACK (%s) errcode<%s> payload=0x%08X; size=%d\n", msg_ID_str(resp),
msgErrStr(err_code), (int)payload, payload_size);
printBuf((char *)msg, loglen);
}
if (msg_start(msg_control, &prof_session.user_space_inst,
- &msg_reply) != 0) {
+ &msg_reply, &err_code) != 0) {
LOGE("parse error\n");
goto send_ack;
}
case NMSG_BINARY_INFO:
return process_msg_binary_info(&msg_control);
case NMSG_SWAP_INST_ADD:
- if (msg_swap_inst_add(&msg_control, &prof_session.user_space_inst, &msg_reply) != 0) {
+ if (msg_swap_inst_add(&msg_control, &prof_session.user_space_inst,
+ &msg_reply, &error_code) != 0) {
LOGE("swap inst add\n");
- error_code = ERR_UNKNOWN;
goto send_ack;
}
if (msg_reply != NULL)
//send ack to host
goto send_ack;
case NMSG_SWAP_INST_REMOVE:
- if (msg_swap_inst_remove(&msg_control, &prof_session.user_space_inst, &msg_reply) != 0) {
+ if (msg_swap_inst_remove(&msg_control, &prof_session.user_space_inst,
+ &msg_reply, &error_code) != 0) {
LOGE("swap inst remove\n");
error_code = ERR_UNKNOWN;
goto send_ack;