Changeset: 50ec479ea39a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=50ec479ea39a
Modified Files:
MonetDB.spec
common/stream/stream.c
debian/rules
sql/common/sql_changeset.c
sql/common/sql_hash.c
sql/common/sql_list.c
sql/common/sql_types.c
sql/storage/sql_catalog.c
sql/storage/store.c
Branch: default
Log Message:
Merge with Jan2014 branch.
diffs (283 lines):
diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -58,7 +58,6 @@ BuildRequires: rubygems-devel
BuildRequires: unixODBC-devel
BuildRequires: zlib-devel
-%define perl_libdir %(perl -MConfig -e '$x=$Config{installvendorarch}; $x =~
s|$Config{vendorprefix}/||; print $x;')
# need to define python_sitelib on RHEL 5 and older
# no need to define python3_sitelib: it's defined by python3-devel
%if 0%{?rhel} && 0%{?rhel} <= 5
@@ -272,10 +271,15 @@ program.
Summary: MonetDB perl interface
Group: Applications/Databases
Requires: %{name}-client = %{version}-%{release}
-Requires: perl
+Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
Requires: perl(DBI)
Requires: perl(Digest::SHA)
Requires: perl(Digest::MD5)
+# when not using BuildArch: noarch, globally replace perl_vendorlib by
+# perl_vendorarch
+BuildArch: noarch
+%{?perl_default_filter}
+%global __requires_exclude perl\\(DBD::monetdb|perl\\(MonetDB::|perl\\(Mapi\\)
%description client-perl
MonetDB is a database management system that is developed from a
@@ -288,7 +292,7 @@ program.
%files client-perl
%defattr(-,root,root)
-%{_prefix}/%{perl_libdir}/*
+%{perl_vendorlib}/*
%package -n rubygem-monetdb-sql
Summary: MonetDB ruby interface
@@ -756,6 +760,7 @@ developer, but if you do want to test, t
--with-java=no \
--with-mseed=no \
--with-perl=yes \
+ --with-perl-libdir=lib/perl5 \
--with-pthread=yes \
--with-python2=yes \
--with-python3=%{?rhel:no}%{!?rhel:yes} \
@@ -778,6 +783,10 @@ mkdir -p $RPM_BUILD_ROOT%{_localstatedir
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/monetdb5/dbfarm
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/monetdb
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/run/monetdb
+mkdir -p $RPM_BUILD_ROOT%{perl_vendorlib}
+if [ ! $RPM_BUILD_ROOT%{_prefix}/lib/perl5 -ef
$RPM_BUILD_ROOT%{perl_vendorlib} ]; then
+ mv $RPM_BUILD_ROOT%{_prefix}/lib/perl5/* $RPM_BUILD_ROOT%{perl_vendorlib}
+fi
# remove unwanted stuff
# .la files
diff --git a/common/stream/stream.c b/common/stream/stream.c
--- a/common/stream/stream.c
+++ b/common/stream/stream.c
@@ -1587,7 +1587,7 @@ socket_open(SOCKET sock, const char *nam
#endif
#if defined(SO_KEEPALIVE) && !defined(WIN32)
if (domain != PF_UNIX) { /* not on UNIX sockets */
- int opt = 0;
+ int opt = 1;
setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, (void *) &opt,
sizeof(opt));
}
#endif
diff --git a/debian/rules b/debian/rules
--- a/debian/rules
+++ b/debian/rules
@@ -53,6 +53,7 @@ override_dh_auto_configure:
--with-java=no \
--with-mseed=no \
--with-perl=yes \
+ --with-perl-libdir=lib/perl5 \
--with-pthread=yes \
--with-python2=yes \
--with-python3=yes \
diff --git a/sql/common/sql_changeset.c b/sql/common/sql_changeset.c
--- a/sql/common/sql_changeset.c
+++ b/sql/common/sql_changeset.c
@@ -57,27 +57,17 @@ cs_add(changeset * cs, void *elm, int fl
list_append(cs->set, elm);
if (flag == TR_NEW && !cs->nelm)
cs->nelm = cs->set->t;
- MT_lock_set(&cs->set->ht_lock, "cs_add");
- if (cs->set->ht)
- hash_add(cs->set->ht, base_key(elm), elm);
- MT_lock_unset(&cs->set->ht_lock, "cs_add");
}
void
cs_add_before(changeset * cs, node *n, void *elm)
{
list_append_before(cs->set, n, elm);
- MT_lock_set(&cs->set->ht_lock, "cs_add_before");
- if (cs->set->ht)
- hash_add(cs->set->ht, base_key(elm), elm);
- MT_lock_unset(&cs->set->ht_lock, "cs_add_before");
}
void
cs_del(changeset * cs, node *elm, int flag)
{
- void *val = elm->data;
-
if (flag == TR_NEW) { /* remove just added */
if (cs->nelm == elm)
cs->nelm = elm->next;
@@ -87,10 +77,6 @@ cs_del(changeset * cs, node *elm, int fl
cs->dset = list_new(cs->sa, cs->destroy);
list_move_data(cs->set, cs->dset, elm->data);
}
- MT_lock_set(&cs->set->ht_lock, "cs_del");
- if (cs->set->ht)
- hash_del(cs->set->ht, base_key(val), val);
- MT_lock_unset(&cs->set->ht_lock, "cs_del");
}
int
diff --git a/sql/common/sql_hash.c b/sql/common/sql_hash.c
--- a/sql/common/sql_hash.c
+++ b/sql/common/sql_hash.c
@@ -47,11 +47,26 @@ hash_new(sql_allocator *sa, int size, fk
return ht;
}
+static
+int
+not_done(sql_hash *h, int key, void *value)
+{
+ sql_hash_e *e = h->buckets[key&(h->size-1)];
+
+ while(e && e->value != value) {
+ e = e->chain;
+ }
+ if (e)
+ return 0;
+ return 1;
+}
+
sql_hash_e*
hash_add(sql_hash *h, int key, void *value)
{
sql_hash_e *e = SA_ZNEW(h->sa, sql_hash_e);
+ assert(not_done(h,key,value));
e->chain = h->buckets[key&(h->size-1)];
h->buckets[key&(h->size-1)] = e;
e->key = key;
diff --git a/sql/common/sql_list.c b/sql/common/sql_list.c
--- a/sql/common/sql_list.c
+++ b/sql/common/sql_list.c
@@ -96,8 +96,10 @@ list_empty(list *l)
static void
node_destroy(list *l, node *n)
{
- if (n->data && l->destroy)
+ if (n->data && l->destroy) {
l->destroy(n->data);
+ n->data = NULL;
+ }
if (!l->sa)
_DELETE(n);
}
@@ -109,11 +111,14 @@ list_destroy(list *l)
node *n = l->h;
MT_lock_destroy(&l->ht_lock);
- while (n && (l->destroy|| !l->sa)) {
- node *t = n;
+ l->h = NULL;
+ if (l->destroy || l->sa == NULL) {
+ while (n) {
+ node *t = n;
- n = n->next;
- node_destroy(l, t);
+ n = t->next;
+ node_destroy(l, t);
+ }
}
if (!l->sa)
_DELETE(l);
diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -1046,9 +1046,6 @@ sql_create_func_(sql_allocator *sa, char
list_append(aggrs, t);
} else {
list_append(funcs, t);
- MT_lock_set(&funcs->ht_lock, "sql_create_func_");
- hash_add(funcs->ht, base_key(&t->base), t);
- MT_lock_unset(&funcs->ht_lock, "sql_create_func_");
}
return t;
}
@@ -1075,9 +1072,6 @@ sql_create_sqlfunc(sql_allocator *sa, ch
t->sql = 1;
t->side_effect = FALSE;
list_append(funcs, t);
- MT_lock_set(&funcs->ht_lock, "sql_create_sqlfunc");
- hash_add(funcs->ht, base_key(&t->base), t);
- MT_lock_unset(&funcs->ht_lock, "sql_create_sqlfunc");
return t;
}
diff --git a/sql/storage/sql_catalog.c b/sql/storage/sql_catalog.c
--- a/sql/storage/sql_catalog.c
+++ b/sql/storage/sql_catalog.c
@@ -293,7 +293,7 @@ find_all_sql_func(sql_schema * s, char *
if (f->type == type && name[0] == b->name[0] &&
strcmp(name, b->name) == 0) {
if (!res)
res = list_create((fdestroy)NULL);
- list_append(res, n->data);
+ list_append(res, f);
}
}
}
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -2878,11 +2878,8 @@ reset_changeset(sql_trans *tr, changeset
if (fs->nelm) {
for (n = fs->nelm; n; ) {
node *nxt = n->next;
+
list_remove_node(fs->set, n);
- MT_lock_set(&fs->set->ht_lock, "reset_changeset");
- if(fs->set->ht)
- hash_del(fs->set->ht, base_key(n->data),
n->data);
- MT_lock_unset(&fs->set->ht_lock, "reset_changeset");
n = nxt;
}
fs->nelm = NULL;
@@ -2910,16 +2907,12 @@ reset_changeset(sql_trans *tr, changeset
fprintf(stderr, "#reset_cs %s\n",
(fb->name)?fb->name:"help");
} else if (fb->id < pfb->id) {
node *t = n->next;
+
if (bs_debug) {
sql_base *b = n->data;
fprintf(stderr, "#reset_cs free %s\n",
(b->name)?b->name:"help");
}
list_remove_node(fs->set, n);
- MT_lock_set(&fs->set->ht_lock,
"reset_changeset");
- if(fs->set->ht)
- hash_del(fs->set->ht,
base_key(n->data), n->data);
- MT_lock_unset(&fs->set->ht_lock,
"reset_changeset");
-
n = t;
} else { /* a new id */
sql_base *r = fd(tr, TR_OLD, pfb, b);
@@ -2944,16 +2937,13 @@ reset_changeset(sql_trans *tr, changeset
}
while ( ok == LOG_OK && n) { /* remove remaining old stuff */
node *t = n->next;
+
if (bs_debug) {
sql_base *b = n->data;
fprintf(stderr, "#reset_cs free %s\n",
(b->name)?b->name:"help");
}
list_remove_node(fs->set, n);
- MT_lock_set(&fs->set->ht_lock, "reset_changeset");
- if(fs->set->ht)
- hash_del(fs->set->ht, base_key(n->data),
n->data);
- MT_lock_unset(&fs->set->ht_lock, "reset_changeset");
n = t;
}
}
@@ -3071,10 +3061,6 @@ reset_schema(sql_trans *tr, sql_schema *
node *nxt = n->next;
list_remove_node(fs->tables.set, n);
- MT_lock_set(&fs->tables.set->ht_lock,
"reset_schema");
- if(fs->tables.set->ht)
- hash_del(fs->tables.set->ht,
base_key(n->data), n->data);
- MT_lock_unset(&fs->tables.set->ht_lock,
"reset_schema");
n = nxt;
}
fs->tables.nelm = NULL;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list