lp:~jaypipes/drizzle/bugs

Created by Jay Pipes and last modified
Get this branch:
bzr branch lp:~jaypipes/drizzle/bugs
Only Jay Pipes can upload to this branch. If you are Jay Pipes please log in for upload directions.

Branch merges

Related bugs

Related blueprints

Branch information

Owner:
Jay Pipes
Project:
Drizzle
Status:
Merged

Recent revisions

1253. By Jay Pipes <jpipes@serialcoder>

Fixes LP Bug #500031:

"dbt2 fails with 1024 connections"

After investigation into this, I discovered that there was a
race condition in TemporalFormat::match():

TemporalFormat::_re is the compiled PCRE regular expression object
inside each of the TemporalFormat objects, which are shared
among all threads and live in global scope.

Unfortunately, TemporalFormat::match() was using the member
variable TemporalFormat::_match_vector as its match state.
At high concurrency, this means that the following race
condition could happen:

Thread 1 executes pcre_exec() and finds a match, therefore
populating TemporalFormat::_match_vector of integers
with the position offsets of the matched pieces of the temporal object.

Thread 1, during construction of the Temporal output of
TemporalFormat::match(), uses these _match_vector position
offsets in calling std::string::substr on a copy of the
matched string, essentially "cutting up" the string
into year, month, day, etc.

Thread 2 executes pcre_exec() and also finds a match,
thereby changing TemporalFormat::_match_vector to something
different

Thread 1 continues trying to use std::string::substr(),
but now uses offsets that are invalid for its string,
thereby producing an out_of_range exception.

The solution is to pull the TemporalFormat::_match_vector
member variable and instead put a function-scope-level
match_vector variable on the stack inside TemporalFormat::match().

1252. By Brian Aker <brian@gaz>

Merge Jay

1251. By Brian Aker <brian@gaz>

Merging in massif option to test-run.pl

1250. By Brian Aker <brian@gaz>

Merge Monty

1249. By Brian Aker <brian@gaz>

Merge Valgrind.

1248. By Brian Aker <brian@gaz>

Merge from Dennis Schoen

1247. By Brian Aker <brian@gaz>

Merge from Padraig

1246. By Brian Aker <brian@gaz>

MErge Padraig

1245. By Brian Aker <brian@gaz>

Merge Jay

1244. By Brian Aker <brian@gaz>

Fixed from Monty.

Branch metadata

Branch format:
Branch format 7
Repository format:
Bazaar repository format 2a (needs bzr 1.16 or later)
Stacked on:
lp:~drizzle-trunk/drizzle/development
This branch contains Public information 
Everyone can see this information.

Subscribers