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

Reply via email to