Changeset 1408
- Timestamp:
- 10/06/06 22:48:27 (2 years ago)
- Location:
- branches/dev-branch
- Files:
-
- 10 modified
-
opensync/engine/opensync_engine.c (modified) (9 diffs)
-
opensync/engine/opensync_obj_engine.c (modified) (2 diffs)
-
opensync/engine/opensync_status.c (modified) (1 diff)
-
opensync/format/opensync_format_env.c (modified) (1 diff)
-
opensync/ipc/opensync_serializer.c (modified) (1 diff)
-
opensync/opensync-error.h (modified) (1 diff)
-
opensync/opensync_error.c (modified) (3 diffs)
-
opensync/opensync_error_internals.h (modified) (1 diff)
-
tests/check_error.c (modified) (3 diffs)
-
tests/engine-tests/check_engine_error.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/dev-branch/opensync/engine/opensync_engine.c
r1263 r1408 79 79 osync_assert(engine); 80 80 if (engine->error) { 81 osync_ trace(TRACE_ERROR, "Not overwriting error");82 return;81 osync_error_stack(&error, &engine->error); 82 osync_error_unref(&engine->error); 83 83 } 84 84 … … 122 122 { 123 123 char *format = g_hash_table_lookup(engine->internalFormats, objtype); 124 if (!format) 125 return NULL; 124 126 return osync_format_env_find_objformat(engine->formatenv, format); 125 127 } … … 128 130 { 129 131 osync_trace(TRACE_INTERNAL, "Setting internal format of %s to %p", objtype, format); 132 if (!format) 133 return; 130 134 g_hash_table_insert(engine->internalFormats, g_strdup(objtype), g_strdup(osync_objformat_get_name(format))); 131 135 } … … 412 416 413 417 if (g_atomic_int_dec_and_test(&(engine->ref_count))) { 418 osync_trace(TRACE_ENTRY, "%s(%p)", __func__, engine); 419 414 420 if (engine->internalFormats) 415 421 g_hash_table_destroy(engine->internalFormats); … … 457 463 osync_archive_unref(engine->archive); 458 464 465 if (engine->error) 466 osync_error_unref(&(engine->error)); 467 459 468 g_free(engine); 469 osync_trace(TRACE_EXIT, "%s", __func__); 460 470 } 461 471 } … … 740 750 741 751 if (BitCount(engine->obj_errors | engine->obj_connects) == g_list_length(engine->object_engines)) { 742 osync_status_update_engine(engine, OSYNC_ENGINE_EVENT_CONNECTED, NULL); 743 osync_engine_event(engine, OSYNC_ENGINE_EVENT_CONNECTED); 752 if (BitCount(engine->obj_errors) == g_list_length(engine->object_engines)) { 753 OSyncError *locerror = NULL; 754 osync_error_set(&locerror, OSYNC_ERROR_GENERIC, "No objtypes left without error. Aborting"); 755 osync_trace(TRACE_ERROR, "%s", osync_error_print(&locerror)); 756 osync_engine_set_error(engine, locerror); 757 osync_status_update_engine(engine, OSYNC_ENGINE_EVENT_ERROR, locerror); 758 osync_engine_event(engine, OSYNC_ENGINE_EVENT_ERROR); 759 osync_error_unref(&locerror); 760 } else { 761 osync_status_update_engine(engine, OSYNC_ENGINE_EVENT_CONNECTED, NULL); 762 osync_engine_event(engine, OSYNC_ENGINE_EVENT_CONNECTED); 763 } 744 764 return TRUE; 745 765 } … … 972 992 break; 973 993 case OSYNC_ENGINE_EVENT_ERROR: 994 osync_trace(TRACE_ERROR, "Engine received an error: %s", osync_error_print(&error)); 995 osync_engine_set_error(engine, error); 974 996 engine->obj_errors = engine->obj_errors | (0x1 << i); 975 997 break; … … 1210 1232 break; 1211 1233 case OSYNC_ENGINE_EVENT_ERROR: 1234 osync_trace(TRACE_ERROR, "Engine aborting due to an error: %s", osync_error_print(&(engine->error))); 1235 1236 g_mutex_lock(engine->syncing_mutex); 1237 g_cond_signal(engine->syncing); 1238 g_mutex_unlock(engine->syncing_mutex); 1212 1239 break; 1213 1240 case OSYNC_ENGINE_EVENT_SUCCESSFUL: … … 1289 1316 1290 1317 if (engine->error) { 1318 char *msg = osync_error_print_stack(&(engine->error)); 1319 osync_trace(TRACE_ERROR, "error while synchronizing: %s", msg); 1320 g_free(msg); 1291 1321 osync_error_set_from_error(error, &(engine->error)); 1292 1322 osync_error_unref(&(engine->error)); -
branches/dev-branch/opensync/engine/opensync_obj_engine.c
r1263 r1408 710 710 711 711 if (error) { 712 osync_trace(TRACE_INTERNAL, "Obj Engine received connect error: %s", osync_error_print(&error)); 712 713 osync_obj_engine_set_error(engine, error); 713 714 engine->sink_errors = engine->sink_errors | (0x1 << sinkengine->position); … … 1411 1412 { 1412 1413 osync_assert(engine); 1413 if (engine->error) 1414 if (engine->error) { 1415 osync_error_stack(&error, &engine->error); 1414 1416 osync_error_unref(&engine->error); 1417 } 1415 1418 engine->error = error; 1416 1419 osync_error_ref(&error); -
branches/dev-branch/opensync/engine/opensync_status.c
r1216 r1408 96 96 { 97 97 osync_trace(TRACE_ENTRY, "%s(%p, %p, %i, %s, %p)", __func__, engine, member, type, objtype, error); 98 98 99 if (engine->mebstat_callback) { 99 100 OSyncMemberUpdate *update = g_malloc0(sizeof(OSyncMemberUpdate)); -
branches/dev-branch/opensync/format/opensync_format_env.c
r1216 r1408 119 119 for (m = env->modules; m; m = m->next) { 120 120 module = m->data; 121 if (!osync_module_get_conversion_info(module, env, error)) 122 goto error; 121 if (!osync_module_get_conversion_info(module, env, error)) { 122 osync_trace(TRACE_INTERNAL, "Module get conversion error %s", osync_error_print(error)); 123 osync_error_unref(error); 124 } 123 125 } 124 126 -
branches/dev-branch/opensync/ipc/opensync_serializer.c
r1162 r1408 284 284 osync_error_set(error, (OSyncErrorType)error_type, msg); 285 285 g_free(msg); 286 } else 287 osync_error_unref(error); 288 } 286 } 287 } -
branches/dev-branch/opensync/opensync-error.h
r1263 r1408 52 52 OSYNC_EXPORT void osync_error_set(OSyncError **error, OSyncErrorType type, const char *format, ...); 53 53 OSYNC_EXPORT const char *osync_error_get_name(OSyncError **error); 54 OSYNC_EXPORT void osync_error_update(OSyncError **error, const char *format, ...);55 54 OSYNC_EXPORT void osync_error_set_from_error(OSyncError **target, OSyncError **source); 56 55 OSYNC_EXPORT const char *osync_error_print(OSyncError **error); 56 OSYNC_EXPORT char *osync_error_print_stack(OSyncError **error); 57 OSYNC_EXPORT void osync_error_stack(OSyncError **parent, OSyncError **child); 58 OSYNC_EXPORT OSyncError *osync_error_get_child(OSyncError **parent); 57 59 OSYNC_EXPORT OSyncErrorType osync_error_get_type(OSyncError **error); 58 60 OSYNC_EXPORT void osync_error_set_type(OSyncError **error, OSyncErrorType type); -
branches/dev-branch/opensync/opensync_error.c
r1263 r1408 125 125 if ((*error)->message) 126 126 g_free ((*error)->message); 127 127 128 if ((*error)->child) 129 osync_error_unref(&((*error)->child)); 130 128 131 g_free(*error); 129 132 } … … 178 181 } 179 182 180 /*! @brief Updates the error message 181 * 182 * You can use this function to update the error message on 183 * a error. You can use the old error->message as a parameter 184 * for this function. 185 * 186 * @param error A pointer to a error struct to update 187 * @param format The new message 188 * 189 */ 190 void osync_error_update(OSyncError **error, const char *format, ...) 191 { 192 va_list args; 193 char *buffer; 194 osync_return_if_fail(error != NULL); 195 osync_return_if_fail(*error != NULL); 196 197 va_start(args, format); 198 buffer = g_strdup_vprintf(format, args); 199 g_free((*error)->message); 200 (*error)->message = buffer; 201 va_end (args); 183 char *osync_error_print_stack(OSyncError **error) 184 { 185 if (!osync_error_is_set(error)) 186 return NULL; 187 188 char *submessage = NULL; 189 if ((*error)->child) 190 submessage = osync_error_print_stack(&((*error)->child)); 191 192 char *message = NULL; 193 if (submessage) { 194 message = g_strdup_printf("NEXT ERROR: \"%s\"; %s", (*error)->message, submessage); 195 g_free(submessage); 196 } else 197 message = g_strdup_printf("ROOT CAUSE: \"%s\"", (*error)->message); 198 199 return message; 202 200 } 203 201 … … 240 238 } 241 239 240 void osync_error_stack(OSyncError **parent, OSyncError **child) 241 { 242 if (!parent || !*parent) 243 return; 244 245 if (!child || !*child) 246 return; 247 248 if ((*parent)->child) 249 osync_error_unref(&((*parent)->child)); 250 251 (*parent)->child = *child; 252 osync_error_ref(child); 253 } 254 255 OSyncError *osync_error_get_child(OSyncError **parent) 256 { 257 if (!parent || !*parent) 258 return NULL; 259 260 return (*parent)->child; 261 } 262 242 263 /*! @brief Sets the type of an error 243 264 * -
branches/dev-branch/opensync/opensync_error_internals.h
r1058 r1408 30 30 char *message; 31 31 int ref_count; 32 OSyncError *child; 32 33 }; 33 34 -
branches/dev-branch/tests/check_error.c
r1263 r1408 103 103 END_TEST 104 104 105 START_TEST (error_update_null) 106 { 107 osync_error_update(NULL, NULL); 108 109 } 110 END_TEST 111 112 START_TEST (error_update_null2) 113 { 114 OSyncError *error = NULL; 115 osync_error_update(&error, NULL); 116 } 117 END_TEST 118 119 START_TEST (error_update) 120 { 121 OSyncError *error = NULL; 122 osync_error_set(&error, OSYNC_ERROR_GENERIC, "test"); 123 osync_error_update(&error, "test2%i", 1); 124 fail_unless(!strcmp(osync_error_print(&error), "test21"), NULL); 125 osync_error_unref(&error); 126 } 127 END_TEST 128 129 START_TEST (error_update2) 130 { 131 OSyncError *error = NULL; 132 osync_error_set(&error, OSYNC_ERROR_GENERIC, "test"); 133 osync_error_update(&error, "test2%s", osync_error_print(&error)); 134 fail_unless(!strcmp(osync_error_print(&error), "test2test"), NULL); 135 osync_error_unref(&error); 105 START_TEST (error_stack_null) 106 { 107 osync_error_stack(NULL, NULL); 108 109 } 110 END_TEST 111 112 START_TEST (error_stack_null2) 113 { 114 OSyncError *error = NULL; 115 osync_error_set(&error, OSYNC_ERROR_GENERIC, "test"); 116 117 char *msg = osync_error_print_stack(&error); 118 fail_unless(msg != NULL, NULL); 119 g_free(msg); 120 121 osync_error_stack(&error, NULL); 122 osync_error_unref(&error); 123 } 124 END_TEST 125 126 START_TEST (error_stack) 127 { 128 OSyncError *error = NULL; 129 osync_error_set(&error, OSYNC_ERROR_GENERIC, "test"); 130 OSyncError *error2 = NULL; 131 osync_error_set(&error2, OSYNC_ERROR_GENERIC, "test2"); 132 osync_error_stack(&error, &error2); 133 fail_unless(!strcmp(osync_error_print(&error), "test"), NULL); 134 OSyncError *error3 = osync_error_get_child(&error); 135 fail_unless(!strcmp(osync_error_print(&error3), "test2"), NULL); 136 error3 = osync_error_get_child(&error2); 137 fail_unless(error3 == NULL, NULL); 138 139 osync_error_unref(&error2); 140 osync_error_unref(&error); 141 } 142 END_TEST 143 144 START_TEST (error_stack2) 145 { 146 OSyncError *error1 = NULL; 147 osync_error_set(&error1, OSYNC_ERROR_GENERIC, "test1"); 148 OSyncError *error2 = NULL; 149 osync_error_set(&error2, OSYNC_ERROR_GENERIC, "test2"); 150 OSyncError *error3 = NULL; 151 osync_error_set(&error3, OSYNC_ERROR_GENERIC, "test3"); 152 153 osync_error_stack(&error1, &error2); 154 osync_error_stack(&error2, &error3); 155 156 osync_error_unref(&error2); 157 osync_error_unref(&error3); 158 159 fail_unless(!strcmp(osync_error_print(&error1), "test1"), NULL); 160 OSyncError *error = osync_error_get_child(&error1); 161 fail_unless(!strcmp(osync_error_print(&error), "test2"), NULL); 162 error = osync_error_get_child(&error); 163 fail_unless(!strcmp(osync_error_print(&error), "test3"), NULL); 164 165 char *msg = osync_error_print_stack(&error1); 166 fail_unless(msg != NULL, NULL); 167 g_free(msg); 168 169 osync_error_unref(&error1); 136 170 } 137 171 END_TEST … … 141 175 osync_error_set(NULL, OSYNC_NO_ERROR, NULL); 142 176 143 }144 END_TEST145 146 START_TEST (error_set_null2)147 {148 OSyncError *error = NULL;149 osync_error_update(&error, OSYNC_NO_ERROR, NULL);150 osync_error_unref(&error);151 177 } 152 178 END_TEST … … 193 219 create_case(s, "error_check", error_check); 194 220 create_case(s, "error_check2", error_check2); 195 create_case(s, "error_ update_null", error_update_null);196 create_case(s, "error_ update_null2", error_update_null2);197 create_case(s, "error_ update", error_update);198 create_case(s, "error_ update2", error_update2);221 create_case(s, "error_stack_null", error_stack_null); 222 create_case(s, "error_stack_null2", error_stack_null2); 223 create_case(s, "error_stack", error_stack); 224 create_case(s, "error_stack2", error_stack2); 199 225 create_case(s, "error_set_null", error_set_null); 200 create_case(s, "error_set_null2", error_set_null2);201 226 create_case(s, "error_duplicate_null", error_duplicate_null); 202 227 create_case(s, "error_duplicate", error_duplicate); -
branches/dev-branch/tests/engine-tests/check_engine_error.c
r1263 r1408 932 932 osync_engine_set_plugindir(engine, testbed); 933 933 934 osync_engine_set_conflict_callback(engine, conflict_handler_choose_first, GINT_TO_POINTER(1)); 935 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1)); 936 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1)); 937 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1)); 938 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1)); 939 934 940 fail_unless(osync_engine_initialize(engine, &error), NULL); 935 941 fail_unless(error == NULL, NULL); … … 941 947 fail_unless(osync_engine_finalize(engine, &error), NULL); 942 948 fail_unless(error == NULL, NULL); 943 944 osync_engine_set_conflict_callback(engine, conflict_handler_choose_first, NULL);945 osync_engine_set_changestatus_callback(engine, entry_status, NULL);946 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);947 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);948 osync_engine_set_memberstatus_callback(engine, member_status, NULL);949 949 950 950 fail_unless(num_connect == 2, NULL); … … 954 954 /* Client checks */ 955 955 fail_unless(num_client_connected == 0, NULL); 956 fail_unless(num_client_main_connected == 0, NULL);956 fail_unless(num_client_main_connected == 2, NULL); 957 957 fail_unless(num_client_read == 0, NULL); 958 958 fail_unless(num_client_main_read == 0, NULL); … … 968 968 /* Client checks */ 969 969 fail_unless(num_engine_connected == 0, NULL); 970 fail_unless(num_engine_errors == 0, NULL);970 fail_unless(num_engine_errors == 1, NULL); 971 971 fail_unless(num_engine_read == 0, NULL); 972 972 fail_unless(num_engine_written == 0, NULL);
