Bug #47923 New "mf_keycache.c" requires thread support
| Submitted: | 8 Oct 2009 18:42 | Modified: | 18 Dec 2009 11:43 |
|---|---|---|---|
| Reporter: | Joerg Bruehe | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Compiling | Severity: | S3 (Non-critical) |
| Version: | 5.0.87 | OS: | Any |
| Assigned to: | Joerg Bruehe | CPU Architecture: | Any |
[8 Oct 2009 19:59]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/86246 2817 Joerg Bruehe 2009-10-08 Fix bug#47923 New "mf_keycache.c" requires thread support The bug is a compilation issue: Function "find_key_block()" had thread operations which were not guarded by "#if THREAD", add that now. @ mysys/mf_keycache.c Without thread-support, we are in a single-threaded world, so there is no parallelism, and the keycache cannot be within a resize operation while this request is being processed.
[8 Oct 2009 20:09]
Joerg Bruehe
Running local tests with various "configure" combinations.
[9 Oct 2009 20:15]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/86460 3639 Joerg Bruehe 2009-10-09 [merge] Upmerge the fixes for bug#47923 and bug#47957 from 5.1.
[15 Oct 2009 17:24]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/87019 3639 Joerg Bruehe 2009-10-15 [merge] Upmerge the fixes for bug#47923 and bug#47957 from 5.1. This includes further changes which are needed in 6.0, see the comments for "storage/archive/Makefile.am" and "unittest/backup/Makefile.am". @ configure.in Upmerge from 5.1 Specific in 6.0, we need a conditional "SERVER" which is used in "unittest/backup/" to not build some server-related tests if the build is "--without-server". @ mysys/mf_keycache.c Upmerge from 5.1 @ storage/archive/Makefile.am See comment in "concurrency_test.c": That test cannot be used unless there is thread support in the client library. The code treated this as a runtime issue, but that is wrong: It is even a linkage issue, because the test program needs both "libmysqlclient" (from "concurrency_test.c") and "libmysyslt" (from "azio.c"), and these two will conflict unless it is the threaded client library. The solution is to make the build of this test program depend on "THREAD_SAFE_CLIENT". @ unittest/backup/Makefile.am The necessary "libbackupstream" will not be built unless the build includes the server, so building the test program must be restricted to that case.
[16 Oct 2009 10:21]
Joerg Bruehe
Patch is pushed to the bugteam trees, currently set at versions 5.0.88 and 5.1.41.
[16 Oct 2009 12:37]
Bugs System
Pushed into 5.0.88 (revid:joerg@mysql.com-20091016122941-rf6z0keqvmlgjfto) (version source revid:joerg@mysql.com-20091016122941-rf6z0keqvmlgjfto) (merge vers: 5.0.88) (pib:13)
[16 Oct 2009 17:46]
Paul DuBois
Noted in 5.0.88 changelog. mysys/mf_keycache.c requires threading, but no test was made for thread support. Setting report to NDI pending push to 5.1.x+.
[22 Oct 2009 6:33]
Bugs System
Pushed into 6.0.14-alpha (revid:alik@sun.com-20091022063126-l0qzirh9xyhp0bpc) (version source revid:alik@sun.com-20091019135554-s1pvptt6i750lfhv) (merge vers: 6.0.14-alpha) (pib:13)
[22 Oct 2009 7:05]
Bugs System
Pushed into 5.5.0-beta (revid:alik@sun.com-20091022060553-znkmxm0g0gm6ckvw) (version source revid:alik@sun.com-20091019132831-5j6xs19ld16m7r8j) (merge vers: 5.5.0-beta) (pib:13)
[22 Oct 2009 19:48]
Paul DuBois
Noted in 5.1.41, 5.5.0, 6.0.14 changelogs.
[18 Dec 2009 10:27]
Bugs System
Pushed into 5.1.41-ndb-7.1.0 (revid:jonas@mysql.com-20091218102229-64tk47xonu3dv6r6) (version source revid:jonas@mysql.com-20091218095730-26gwjidfsdw45dto) (merge vers: 5.1.41-ndb-7.1.0) (pib:15)
[18 Dec 2009 10:43]
Bugs System
Pushed into 5.1.41-ndb-6.2.19 (revid:jonas@mysql.com-20091218100224-vtzr0fahhsuhjsmt) (version source revid:jonas@mysql.com-20091217101452-qwzyaig50w74xmye) (merge vers: 5.1.41-ndb-6.2.19) (pib:15)
[18 Dec 2009 10:45]
MC Brown
Added entry to 5.1.40-ndb-7.1.0
[18 Dec 2009 10:58]
Bugs System
Pushed into 5.1.41-ndb-6.3.31 (revid:jonas@mysql.com-20091218100616-75d9tek96o6ob6k0) (version source revid:jonas@mysql.com-20091217154335-290no45qdins5bwo) (merge vers: 5.1.41-ndb-6.3.31) (pib:15)
[18 Dec 2009 11:11]
MC Brown
Added entry to 5.1.41-ndb-6.2.19 and 5.1.42-ndb-6.3.31
[18 Dec 2009 11:12]
Bugs System
Pushed into 5.1.41-ndb-7.0.11 (revid:jonas@mysql.com-20091218101303-ga32mrnr15jsa606) (version source revid:jonas@mysql.com-20091218064304-ezreonykd9f4kelk) (merge vers: 5.1.41-ndb-7.0.11) (pib:15)
[18 Dec 2009 11:43]
MC Brown
Already in 5.1.41
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.050 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.
Description: The current code of "mf_keycache.c" will not compile unless there is thread support, the error is: gcc -DDEFAULT_BASEDIR=\"/usr/local\" -DMYSQL_DATADIR="\"/usr/local/var\"" -DDEFAULT_CHARSET_HOME="\"/usr/local\"" -DSHAREDIR="\"/usr/local/share/mysql\"" -DDEFAULT_HOME_ENV=MYSQL_HOME -DDEFAULT_GROUP_SUFFIX_ENV=MYSQL_GROUP_SUFFIX -DDEFAULT_SYSCONFDIR="\"/usr/local/etc\"" -DHAVE_CONFIG_H -I. -I../include -I../include -I../include -I. -O3 -DDBUG_OFF -MT mf_keycache.o -MD -MP -MF .deps/mf_keycache.Tpo -c -o mf_keycache.o mf_keycache.c mf_keycache.c: In function ‘find_key_block’: mf_keycache.c:1782: error: ‘my_thread_var’ undeclared (first use in this function) mf_keycache.c:1782: error: (Each undeclared identifier is reported only once mf_keycache.c:1782: error: for each function it appears in.) mf_keycache.c:1783: error: dereferencing pointer to incomplete type mf_keycache.c:1789: error: dereferencing pointer to incomplete type mf_keycache.c:1791: error: dereferencing pointer to incomplete type mf_keycache.c:1792: error: dereferencing pointer to incomplete type make[2]: *** [mf_keycache.o] Error 1 make[2]: Leaving directory `/MySQL/REPO/V50/platform/mysql-5.0.87/mysys' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/MySQL/REPO/V50/platform/mysql-5.0.87' make: *** [all] Error 2 This is no issue in a server build (which has thread support, so it doesn't happen), but it happens (in 5.0.87) when you specify "--without-server". While I see no use for this module in "libmysys" unless we build a server, it still is contained. How to repeat: Configure "--without-server", try to build. Suggested fix: Enclose the whole section dealing with a key cache resize in "#ifdef THREAD": If there is no thread support (single-threaded), a resize operation cannot be in progress when another request is processed in the key cache. In 6.0, this would be the patch; 5.0 is identical (except for a slight line number shift): --- /V60/push-6.0/mysys/mf_keycache.c 2009-09-28 15:47:56.000000000 +0200 +++ mysys/mf_keycache.c 2009-10-05 12:13:50.000000000 +0200 @@ -1757,6 +1757,7 @@ - block assigned but not yet read from file (invalid data). */ +#if THREAD if (keycache->in_resize) { /* This is a request during a resize operation */ @@ -1998,6 +1999,9 @@ } DBUG_RETURN(0); } +#else /* THREAD */ +DBUG_ASSERT(!keycache->in_resize); +#endif if (page_status == PAGE_READ && (block->status & (BLOCK_IN_EVICTION | BLOCK_IN_SWITCH | In the long run, a restructuring of the server file grouping that puts this module into a server-only library would be even better.