projects
/
idzebra-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed memory leak that occurred if sorting failed.
[idzebra-moved-to-github.git]
/
bfile
/
commit.c
diff --git
a/bfile/commit.c
b/bfile/commit.c
index
782ca55
..
03f0b25
100644
(file)
--- a/
bfile/commit.c
+++ b/
bfile/commit.c
@@
-1,8
+1,5
@@
-/* $Id: commit.c,v 1.30 2006-11-14 08:12:06 adam Exp $
- Copyright (C) 1995-2006
- Index Data ApS
-
-This file is part of the Zebra server.
+/* This file is part of the Zebra server.
+ Copyright (C) 1995-2008 Index Data
Zebra is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Zebra is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
@@
-31,6
+28,8
@@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#define CF_OPTIMIZE_COMMIT 0
#define CF_OPTIMIZE_COMMIT 0
+static int log_level = 0;
+
#if CF_OPTIMIZE_COMMIT
struct map_cache_entity {
int from;
#if CF_OPTIMIZE_COMMIT
struct map_cache_entity {
int from;
@@
-66,13
+65,13
@@
static int map_cache_cmp_from (const void *p1, const void *p2)
((struct map_cache_entity*) p2)->from;
}
((struct map_cache_entity*) p2)->from;
}
-static int map_cache_cmp_to (const void *p1, const void *p2)
+static int map_cache_cmp_to(const void *p1, const void *p2)
{
return ((struct map_cache_entity*) p1)->to -
((struct map_cache_entity*) p2)->to;
}
{
return ((struct map_cache_entity*) p1)->to -
((struct map_cache_entity*) p2)->to;
}
-static int map_cache_flush (struct map_cache *m_p)
+static int map_cache_flush(struct map_cache *m_p)
{
int i;
{
int i;
@@
-80,11
+79,11
@@
static int map_cache_flush (struct map_cache *m_p)
assert (m_p->no < 2 || m_p->map[0].from < m_p->map[1].from);
for (i = 0; i<m_p->no; i++)
{
assert (m_p->no < 2 || m_p->map[0].from < m_p->map[1].from);
for (i = 0; i<m_p->no; i++)
{
- if (!mf_read (m_p->cf->block_mf, m_p->map[i].from, 0, 0,
- m_p->buf + i * m_p->cf->head.block_size))
+ if (mf_read(m_p->cf->block_mf, m_p->map[i].from, 0, 0,
+ m_p->buf + i * m_p->cf->head.block_size) != 1)
{
yaz_log (YLOG_FATAL, "read commit block at position %d",
{
yaz_log (YLOG_FATAL, "read commit block at position %d",
- m_p->map[i].from);
+ m_p->map[i].from);
return -1;
}
m_p->map[i].from = i;
return -1;
}
m_p->map[i].from = i;
@@
-93,8
+92,9
@@
static int map_cache_flush (struct map_cache *m_p)
assert (m_p->no < 2 || m_p->map[0].to < m_p->map[1].to);
for (i = 0; i<m_p->no; i++)
{
assert (m_p->no < 2 || m_p->map[0].to < m_p->map[1].to);
for (i = 0; i<m_p->no; i++)
{
- mf_write (m_p->cf->rmf, m_p->map[i].to, 0, 0,
- m_p->buf + m_p->map[i].from * m_p->cf->head.block_size);
+ if (mf_write(m_p->cf->rmf, m_p->map[i].to, 0, 0,
+ m_p->buf + m_p->map[i].from * m_p->cf->head.block_size))
+ return -1;
}
m_p->no = 0;
return 0;
}
m_p->no = 0;
return 0;
@@
-102,7
+102,7
@@
static int map_cache_flush (struct map_cache *m_p)
static int map_cache_del(struct map_cache *m_p)
{
static int map_cache_del(struct map_cache *m_p)
{
- int r = map_cache_flush (m_p);
+ int r = map_cache_flush(m_p);
xfree (m_p->map);
xfree (m_p->buf);
xfree (m_p);
xfree (m_p->map);
xfree (m_p->buf);
xfree (m_p);
@@
-117,7
+117,7
@@
static int map_cache_add(struct map_cache *m_p, int from, int to)
m_p->map[i].to = to;
m_p->no = ++i;
if (i == m_p->max)
m_p->map[i].to = to;
m_p->no = ++i;
if (i == m_p->max)
- return map_cache_flush (m_p);
+ return map_cache_flush(m_p);
return 0;
}
return 0;
}
@@
-159,13
+159,13
@@
static int cf_commit_hash (CFile cf)
goto out;
}
#else
goto out;
}
#else
- if (mf_read (cf->block_mf, p->vno[i], 0, 0, cf->iobuf) != 1)
+ if (mf_read(cf->block_mf, p->vno[i], 0, 0, cf->iobuf) != 1)
{
yaz_log (YLOG_FATAL, "read commit block");
r = -1;
goto out;
}
{
yaz_log (YLOG_FATAL, "read commit block");
r = -1;
goto out;
}
- if (mf_write (cf->rmf, p->no[i], 0, 0, cf->iobuf))
+ if (mf_write(cf->rmf, p->no[i], 0, 0, cf->iobuf))
{
yaz_log (YLOG_FATAL, "write commit block");
r = -1;
{
yaz_log (YLOG_FATAL, "write commit block");
r = -1;
@@
-224,7
+224,7
@@
static int cf_commit_flat(CFile cf)
goto out;
}
#else
goto out;
}
#else
- if (!mf_read (cf->block_mf, fp[i], 0, 0, cf->iobuf))
+ if (mf_read (cf->block_mf, fp[i], 0, 0, cf->iobuf) != 1)
{
yaz_log (YLOG_FATAL, "read data block hno=" ZINT_FORMAT " (" ZINT_FORMAT "-" ZINT_FORMAT ") "
"i=%d commit block at " ZINT_FORMAT " (->" ZINT_FORMAT")",
{
yaz_log (YLOG_FATAL, "read data block hno=" ZINT_FORMAT " (" ZINT_FORMAT "-" ZINT_FORMAT ") "
"i=%d commit block at " ZINT_FORMAT " (->" ZINT_FORMAT")",
@@
-233,7
+233,7
@@
static int cf_commit_flat(CFile cf)
r = -1;
goto out;
}
r = -1;
goto out;
}
- if (mf_write (cf->rmf, vno, 0, 0, cf->iobuf) != 1)
+ if (mf_write(cf->rmf, vno, 0, 0, cf->iobuf))
{
r = -1;
goto out;
{
r = -1;
goto out;
@@
-248,21
+248,23
@@
static int cf_commit_flat(CFile cf)
if (map_cache_del(m_p))
r = -1;
#endif
if (map_cache_del(m_p))
r = -1;
#endif
+ yaz_log(log_level, "cf_commit_flat r=%d", r);
xfree(fp);
return r;
}
xfree(fp);
return r;
}
-int cf_commit (CFile cf)
+int cf_commit(CFile cf)
{
if (cf->bucket_in_memory)
{
yaz_log(YLOG_FATAL, "cf_commit: dirty cache");
return -1;
}
{
if (cf->bucket_in_memory)
{
yaz_log(YLOG_FATAL, "cf_commit: dirty cache");
return -1;
}
+ yaz_log(log_level, "cf_commit: state=%d", cf->head.state);
if (cf->head.state == 1)
if (cf->head.state == 1)
- return cf_commit_hash (cf);
+ return cf_commit_hash(cf);
else if (cf->head.state == 2)
else if (cf->head.state == 2)
- return cf_commit_flat (cf);
+ return cf_commit_flat(cf);
else
{
yaz_log(YLOG_FATAL, "cf_commit: bad state=%d", cf->head.state);
else
{
yaz_log(YLOG_FATAL, "cf_commit: bad state=%d", cf->head.state);