#include <stdarg.h>
#include <time.h>
#include <errno.h>
+#include <string.h>
#ifndef WIN32
#include <unistd.h>
#include <fcntl.h>
#endif
-#include "postgres_fe.h"
+#include "types.h"
#include "libpq-fe.h"
-#include "port.h"
-
#include "slonik.h"
+
+
#ifdef MSVC
#include "config_msvc.h"
#else
failnode_node *nodeinfo;
failnode_set *setinfo;
- char *configbuf;
-
+ char *failsetbuf;
+ char *failnodebuf;
PGresult *res1;
PGresult *res2;
PGresult *res3;
/*
* Allocate and initialize memory to hold some config info
*/
- configbuf = malloc(
- MAXALIGN(sizeof(failnode_node) * num_nodes) +
- MAXALIGN(sizeof(failnode_set) * num_sets) +
- sizeof(failnode_node *) * num_nodes * num_sets);
- memset(configbuf, 0,
- MAXALIGN(sizeof(failnode_node) * num_nodes) +
- MAXALIGN(sizeof(failnode_set) * num_sets) +
- sizeof(failnode_node *) * num_nodes * num_sets);
-
- nodeinfo = (failnode_node *) configbuf;
- setinfo = (failnode_set *) (configbuf +
- MAXALIGN(sizeof(failnode_node) * num_nodes));
+ failsetbuf = malloc( sizeof(failnode_set) * num_sets);
+ failnodebuf = malloc( sizeof(failnode_node) * (num_nodes
+ +num_sets*num_nodes));
+ memset(failsetbuf,0,sizeof(failnode_set) * num_sets);
+ memset(failnodebuf,0,sizeof(failnode_node) * (num_nodes
+ + (num_sets * num_nodes) ));
+
+ nodeinfo = (failnode_node *) failnodebuf;
+ setinfo = (failnode_set *) failsetbuf;
+
for (i = 0; i < num_sets; i++)
{
setinfo[i].subscribers = (failnode_node **)
- (configbuf + MAXALIGN(sizeof(failnode_node) * num_nodes) +
- MAXALIGN(sizeof(failnode_set) * num_sets) +
- sizeof(failnode_node *) * num_nodes * i);
+ (failnodebuf+ sizeof(failnode_node) *
+ (num_nodes + (i*num_nodes)));
}
/*
if (nodeinfo[i].adminfo == NULL)
{
PQclear(res1);
- free(configbuf);
+ free(failnodebuf);
+ free(failsetbuf);
dstring_free(&query);
return -1;
}
{
PQclear(res1);
PQclear(res2);
- free(configbuf);
+ free(failnodebuf);
+ free(failsetbuf);
dstring_free(&query);
return -1;
}
res3 = db_exec_select((SlonikStmt *) stmt, adminfo1, &query);
if (res3 == NULL)
{
- free(configbuf);
+ free(failnodebuf);
+ free(failsetbuf);
dstring_free(&query);
return -1;
}
{
printf("node %d not found - inconsistent configuration\n",
sub_receiver);
- free(configbuf);
+ free(failnodebuf);
+ free(failsetbuf);
PQclear(res3);
PQclear(res2);
dstring_free(&query);
printf("executing failedNode() on %d\n",adminfo1->no_id);
if (db_exec_command((SlonikStmt *) stmt, adminfo1, &query) < 0)
{
- free(configbuf);
+ free(failnodebuf);
+ free(failsetbuf);
dstring_free(&query);
return -1;
}
if (db_exec_command((SlonikStmt *) stmt, nodeinfo[i].adminfo, &query) < 0)
{
- free(configbuf);
+ free(failnodebuf);
+ free(failsetbuf);
dstring_free(&query);
return -1;
}
{
if (db_commit_xact((SlonikStmt *) stmt, nodeinfo[i].adminfo) < 0)
{
- free(configbuf);
+ free(failnodebuf);
+ free(failsetbuf);
dstring_free(&query);
return -1;
}
res1 = db_exec_select((SlonikStmt *) stmt, nodeinfo[i].adminfo, &query);
if (res1 == NULL)
{
- free(configbuf);
+ free(failnodebuf);
+ free(failsetbuf);
dstring_free(&query);
return -1;
}
PQclear(res1);
if (db_rollback_xact((SlonikStmt *) stmt, nodeinfo[i].adminfo) < 0)
{
- free(configbuf);
+ free(failnodebuf);
+ free(failsetbuf);
dstring_free(&query);
return -1;
}
adminfo1, &query);
if (res1 == NULL)
{
- free(configbuf);
+ free(failnodebuf);
+ free(failsetbuf);
dstring_free(&query);
return -1;
}
setinfo[i].subscribers[j]->adminfo, &query);
if (res1 == NULL)
{
- free(configbuf);
+ free(failsetbuf);
+ free(failnodebuf);
+
dstring_free(&query);
return -1;
}
*/
if (db_commit_xact((SlonikStmt *) stmt, adminfo1) < 0)
{
- free(configbuf);
+ free(failsetbuf);
+ free(failnodebuf);
dstring_free(&query);
return -1;
}
}
- free(configbuf);
+ free(failsetbuf);
+ free(failnodebuf);
dstring_free(&query);
return rc;
}