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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list