fixed binlog problems. Set lock on binlog
This commit is contained in:
parent
8bc40adffb
commit
12b9882aae
14
binlog.c
14
binlog.c
@ -1,6 +1,7 @@
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/file.h>
|
||||
#include <stdlib.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
@ -1024,7 +1025,7 @@ void replay_log_event (void) {
|
||||
rptr = in_ptr;
|
||||
break;
|
||||
default:
|
||||
logprintf ("Unknown logevent [0x%08x] 0x%08x [0x%08x]\n", *(rptr - 1), op, *(rptr + 1));
|
||||
logprintf ("Unknown logevent [0x%08x] 0x%08x [0x%08x] at %lld\n", *(rptr - 1), op, *(rptr + 1), binlog_pos);
|
||||
|
||||
assert (0);
|
||||
}
|
||||
@ -1075,8 +1076,8 @@ void replay_log (void) {
|
||||
} else {
|
||||
int x = wptr - rptr;
|
||||
memcpy (binlog_buffer, rptr, 4 * x);
|
||||
wptr -= x;
|
||||
rptr -= x;
|
||||
wptr -= (rptr - binlog_buffer);
|
||||
rptr = binlog_buffer;
|
||||
}
|
||||
int l = (binlog_buffer + BINLOG_BUFFER_SIZE - wptr) * 4;
|
||||
int k = read (fd, wptr, l);
|
||||
@ -1103,7 +1104,12 @@ void write_binlog (void) {
|
||||
perror ("binlog open");
|
||||
exit (2);
|
||||
}
|
||||
lseek (binlog_fd, 0, SEEK_END);
|
||||
|
||||
assert (lseek (binlog_fd, binlog_pos, SEEK_SET) == binlog_pos);
|
||||
if (flock (binlog_fd, LOCK_EX | LOCK_NB) < 0) {
|
||||
perror ("get lock");
|
||||
exit (2);
|
||||
}
|
||||
}
|
||||
|
||||
void add_log_event (const int *data, int len) {
|
||||
|
@ -1,22 +1,66 @@
|
||||
# This is my real config
|
||||
# Feel free to edit it
|
||||
# This is an empty config file
|
||||
# Feel free to put something here
|
||||
|
||||
default_profile = "tele2";
|
||||
default_profile = "binlog";
|
||||
|
||||
mts = {
|
||||
test_dc1 = {
|
||||
config_directory = ".telegram/test_dc1";
|
||||
test = true;
|
||||
msg_num = true;
|
||||
binlog_enabled = true;
|
||||
};
|
||||
|
||||
binlog = {
|
||||
config_directory = ".telegram/binlog";
|
||||
test = false;
|
||||
msg_num = true;
|
||||
binlog_enabled = true;
|
||||
log_level = 2;
|
||||
};
|
||||
|
||||
binlog_mts = {
|
||||
config_directory = ".telegram/binlog_mts";
|
||||
test = false;
|
||||
msg_num = true;
|
||||
binlog_enabled = true;
|
||||
log_level = 2;
|
||||
};
|
||||
|
||||
mega = {
|
||||
config_directory = ".telegram/mega";
|
||||
test = false;
|
||||
msg_num = true;
|
||||
binlog_enabled = true;
|
||||
log_level = 2;
|
||||
};
|
||||
|
||||
new = {
|
||||
config_directory = ".telegram/new";
|
||||
test = false;
|
||||
config_directory = ".telegram/mts";
|
||||
msg_num = true;
|
||||
};
|
||||
|
||||
tele2 = {
|
||||
production = {
|
||||
config_directory = ".telegram/production";
|
||||
test = false;
|
||||
config_directory = ".telegram/tele2";
|
||||
msg_num = true;
|
||||
};
|
||||
|
||||
test = {
|
||||
test = true;
|
||||
config_directory = ".telegram/test";
|
||||
test = true;
|
||||
msg_num = true;
|
||||
};
|
||||
|
||||
test1 = {
|
||||
config_directory = ".telegram/test1";
|
||||
msg_num = true;
|
||||
binlog_enabled = true;
|
||||
};
|
||||
|
||||
test2 = {
|
||||
config_directory = ".telegram/test2";
|
||||
msg_num = true;
|
||||
binlog_enabled = true;
|
||||
};
|
||||
|
||||
|
6
main.c
6
main.c
@ -77,6 +77,7 @@ char *config_directory;
|
||||
char *binlog_file_name;
|
||||
int binlog_enabled;
|
||||
extern int log_level;
|
||||
int sync_from_start;
|
||||
|
||||
void set_default_username (const char *s) {
|
||||
if (default_username) {
|
||||
@ -315,7 +316,7 @@ extern int default_dc_num;
|
||||
int register_mode;
|
||||
void args_parse (int argc, char **argv) {
|
||||
int opt = 0;
|
||||
while ((opt = getopt (argc, argv, "u:hk:vn:Nc:p:l:R")) != -1) {
|
||||
while ((opt = getopt (argc, argv, "u:hk:vn:Nc:p:l:Rf")) != -1) {
|
||||
switch (opt) {
|
||||
case 'u':
|
||||
set_default_username (optarg);
|
||||
@ -342,6 +343,9 @@ void args_parse (int argc, char **argv) {
|
||||
case 'R':
|
||||
register_mode = 1;
|
||||
break;
|
||||
case 'f':
|
||||
sync_from_start = 1;
|
||||
break;
|
||||
case 'h':
|
||||
default:
|
||||
usage ();
|
||||
|
14
queries.c
14
queries.c
@ -64,6 +64,7 @@ long long cur_downloading_bytes;
|
||||
long long cur_downloaded_bytes;
|
||||
|
||||
extern int binlog_enabled;
|
||||
extern int sync_from_start;
|
||||
|
||||
void out_peer_id (peer_id_t id);
|
||||
#define QUERY_TIMEOUT 6.0
|
||||
@ -2218,6 +2219,14 @@ BN_CTX *ctx;
|
||||
|
||||
void do_send_accept_encr_chat (struct secret_chat *E, unsigned char *random) {
|
||||
int i;
|
||||
int ok = 0;
|
||||
for (i = 0; i < 64; i++) {
|
||||
if (E->key[i]) {
|
||||
ok = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ok) { return; } // Already generated key for this chat
|
||||
for (i = 0; i < 64; i++) {
|
||||
*(((int *)random) + i) ^= mrand48 ();
|
||||
}
|
||||
@ -2521,7 +2530,10 @@ void do_get_difference (void) {
|
||||
difference_got = 0;
|
||||
clear_packet ();
|
||||
do_insert_header ();
|
||||
if (seq > 0) {
|
||||
if (seq > 0 || sync_from_start) {
|
||||
if (pts == 0) { pts = 1; }
|
||||
if (qts == 0) { qts = 1; }
|
||||
if (last_date == 0) { last_date = 1; }
|
||||
out_int (CODE_updates_get_difference);
|
||||
out_int (pts);
|
||||
out_int (last_date);
|
||||
|
Loading…
x
Reference in New Issue
Block a user