/* Always calls free(mm) */ void mongo_message_send(mongo_connection * conn, mongo_message* mm){ mongo_header head; /* little endian */ bson_little_endian32(&head.len, &mm->head.len); bson_little_endian32(&head.id, &mm->head.id); bson_little_endian32(&head.responseTo, &mm->head.responseTo); bson_little_endian32(&head.op, &mm->head.op); MONGO_TRY{ looping_write(conn, &head, sizeof(head)); looping_write(conn, &mm->data, mm->head.len - sizeof(head)); }MONGO_CATCH{ free(mm); MONGO_RETHROW(); } free(mm); }
/* Always calls free(mm) */ int mongo_message_send(mongo_connection * conn, mongo_message* mm){ mongo_header head; /* little endian */ int res; bson_little_endian32(&head.len, &mm->head.len); bson_little_endian32(&head.id, &mm->head.id); bson_little_endian32(&head.responseTo, &mm->head.responseTo); bson_little_endian32(&head.op, &mm->head.op); res = looping_write(conn, &head, sizeof(head)); if( res != MONGO_OK ) { free( mm ); return res; } res = looping_write(conn, &mm->data, mm->head.len - sizeof(head)); if( res != MONGO_OK ) { free( mm ); return res; } free( mm ); return MONGO_OK; }