Saint Wesonga
3ed57717d1
Bug 492625 - "Stop using underscores to start #defines" [r=vlad]
...
--HG--
extra : rebase_source : d685fb8bc375ba4fcf97742298e9361ebfe9b851
2010-06-01 08:38:00 -04:00
Jeff Walden
52312bac03
Bug 518663 - ES5: Object.getOwnPropertyNames. r=jorendorff
2009-09-24 14:33:14 -07:00
Chris Jones
8095e43052
Backed out changeset c60e3e48ea38
2010-06-24 19:56:14 -05:00
Taras Glek
065ac23871
Bug 416330 - Suboptimal SQLite page size r=sdwilsh
2010-06-24 16:39:24 -07:00
Ehsan Akhgari
d6b32f425f
Bug 567254 - Crash in Connection::getFilename for memory-based databases; r=sdwilsh
...
--HG--
extra : rebase_source : 9fb1300af8c6b35a4e1aa229af032cd08a76e721
2010-05-20 20:21:09 -04:00
Ehsan Akhgari
a87b134220
Bug 560647 - add startup timeline instrumentation; r=vlad
2010-05-19 19:22:19 -04:00
Vladimir Vukicevic
d562978a21
b=566442; add memory reporters for sqlite; r=sdwilsh
2010-05-19 13:46:08 -07:00
Shawn Wilsher
38ecfb2f5c
Test for bug 562866. r=jorendorff r=asuth
...
--HG--
rename : storage/test/unit/test_js_helpers_enumerate.js => storage/test/unit/test_js_helpers.js
2010-05-11 14:14:54 -07:00
timeless@mozdev.org, Jason Orendorff
4bea23532d
Bug 562866 - StatementParams::NewResolve mishandles JSVAL_IS_STRING(aId). r=sdwilsh.
...
--HG--
extra : rebase_source : f9e1ea925fa38a26c806ba6dbddc52ef83646d55
2010-05-06 13:56:39 -05:00
Daniel Holbert
8d40d741e4
Bug 560383, part 2: (storage directory) Use "!!" for converting int to bool, to avoid MSVC compile warning. r=sdwilsh
2010-05-06 11:53:12 -07:00
Marco Bonardo
21198dad1f
Bug 562787 - Fix getResultByName idl description to specify it needs an AS clause. r=asuth
2010-05-05 15:28:01 +02:00
timeless@mozdev.org
785392580d
Bug 562855 - hook_sqlite_mutex in test_true_async.cpp should check the return value from sqlite3_initialize() and sqlite3_shutdown(), r=asuth
...
--HG--
extra : rebase_source : 648695de6bf0b68965cea43b27c7f9c089d8b945
2010-05-02 01:57:00 -07:00
Mitchell Field
9818f00bf2
Bug 560095 - Use mozilla::services::GetObserverService(). r=biesi,dveditz,gavin,josh,jst,mrbkap,roc,sdwilsh,shaver,sicking,smontagu,surkov
2010-04-29 18:59:13 +02:00
Marco Bonardo
01e6a8ee80
Bug 559678 - followup, make the warning less scarying. rs=sdwilsh
2010-04-22 14:53:56 +02:00
Marco Bonardo
7a4702f9fa
Bug 559678 - Better errors for Storage transactions misuse. r=asuth
2010-04-16 14:31:18 +02:00
Andrew Sutherland
b4419b8d6f
Bug 555124 - Intermittent "ASSERTION: AsyncStatementSpinner not thread-safe: '_mOwningThread.GetThread() == PR_GetCurrentThread()', file .../mozilla/storage/test/test_true_async.cpp, line 162". null out references on the main thread to avoid destruction on the async thread. r=sdwilsh.
2010-03-29 10:54:41 -07:00
Chris Jones
014cb688de
Bug 550425: Bump up the timeout for expensive deadlock tests and print more info on failures. r=bsmedberg,sdwilsh
2010-03-24 19:12:32 -05:00
Andrew Sutherland
ddd3c4327f
Bug 507414 - Add a createAsyncStatement API on mozIStorageConnection. r=sdwilsh, sr=vlad.
...
--HG--
rename : storage/src/mozStorageStatementJSHelper.cpp => storage/src/mozStorageAsyncStatementJSHelper.cpp
rename : storage/src/mozStorageStatementJSHelper.h => storage/src/mozStorageAsyncStatementJSHelper.h
rename : storage/src/mozStorageStatementParams.cpp => storage/src/mozStorageAsyncStatementParams.cpp
rename : storage/src/mozStorageStatementParams.h => storage/src/mozStorageAsyncStatementParams.h
2010-03-24 00:32:40 -07:00
Shawn Wilsher
5bdff598be
Bug 536978 - Cookies should write to the database asynchronously.
...
This makes cookie insertion, updates, and deletions happen asynchronously off of
the main thread. The only I/O done on the main thread is the initial loading of
the database at each startup.
r=dwitte
2010-03-12 07:18:38 -08:00
Shawn Wilsher
6371523ca7
Bug 552092 - Expose a length property on mozIStorageBindingParamsArray
...
Expose the length so that consumers don't have to track if they added anything
to the array themselves.
r=asuth
sr=rob_strong
2010-03-15 10:23:39 -07:00
Shawn Wilsher
b5e02f4c11
Bug 552003 - Passing an empty mozIStorageBindingParamsArray does not error
...
Throw instead of just asserting, which makes debugging this so much easier.
r=asuth
2010-03-15 10:23:39 -07:00
Marco Bonardo
28774cea88
Backing out bug 536978, due to a Storage assertion causing orange. CLOSED TREE
2010-03-12 17:41:28 +01:00
Shawn Wilsher
6fb0361405
Bug 536978 - Cookies should write to the database asynchronously.
...
This makes cookie insertion, updates, and deletions happen asynchronously off of
the main thread. The only I/O done on the main thread is the initial loading of
the database at each startup.
r=dwitte
2010-03-12 07:18:38 -08:00
Shawn Wilsher
e7bf5fc1f2
Bug 496019 - mozilla::storage::Connection::Close can spin a nested event loop
...
Creates a new close method that must be used when using asynchronous statements,
and disallow Close from being called in that case.
r=asuth
sr=vlad
2009-11-09 09:58:34 -08:00
Dan Witte
ddfc2078d1
Fix regression in mozIStorageStatement.bindUTF8StringParameter such that it accepts arbitrary octets by
...
not converting string types. b=544496, r=sdwilsh
2010-02-22 13:57:45 -08:00
Justin Lebar
e730a1afc6
Bug 500328 - Implement History.pushState(), History.replaceState() methods. r=smaug, r=zpao, sr=sicking
2009-09-01 09:45:05 -07:00
Daniel Holbert
46ba50b0cb
Backed out changeset dc7a04be6904 on suspicion of causing bug 543034.
2010-01-29 18:50:46 -08:00
Justin Lebar
a827ba17fc
Bug 500328 - Implement History.pushState(), History.replaceState() methods. r=smaug, r=zpao, sr=sicking
2009-09-01 09:45:05 -07:00
Reed Loden
cdabfc45ae
Backout patch from bug 489897 as the likely cause of pwmgr test failures.
2009-12-31 01:15:11 -06:00
David Dahl ext:(%2C%20Shawn%20Wilsher%20%3Csdwilsh%40shawnwilsher.com%3E)
4a25f2e3a8
Bug 489897 - implement StatementRow::NewEnumerate
...
for (let colName in stmt.row) now works!
r=sdwilsh
r=ddahl
sr=mrbkap
2009-10-12 17:49:00 -05:00
Shawn Wilsher
02575db216
Bug 494828 - Stop using our own mutexes and use SQLite's where possible.
...
Part 2: Use the helper object in a few places where we had our own mutexes.
r=asuth
2009-07-22 15:18:33 -07:00
Shawn Wilsher
9fc75352b9
Bug 525356 - windows debug unit tests: test_connection_executeAsync.js and test_statement_executeAsync.js failing frequently (fatal assertion)
...
Make sure to release the database connection on the thread it was opened on, not
the background thread!
r=asuth
a=beltzner
2009-12-02 10:53:46 -08:00
Shawn Wilsher
7dac22ddd2
Backed out changeset f91a016416d1 (bug 496019)
2009-12-01 15:05:52 -08:00
Shawn Wilsher
09b6e528f9
Bug 496019 - mozilla::storage::Connection::Close can spin a nested event loop
...
Creates a new close method that must be used when using asynchronous statements,
and disallow Close from being called in that case.
r=asuth
sr=vlad
a=dbaron
--HG--
extra : rebase_source : 8470e30ef4ca1e9fb516284cafb77b070e46fde3
2009-11-09 09:58:34 -08:00
Shawn Wilsher
9f62654fa8
Check to make sure that sqlite has been compiled with SQLITE_SECURE_DELETE (Bug 445164); r=asuth
2009-11-23 18:46:39 -05:00
L. David Baron
ab0caddb75
Backed out changeset 4a0bf3ffd767 due to test crashes.
2009-11-19 13:51:31 -08:00
Shawn Wilsher
0d37582e30
Bug 525356 - windows debug unit tests: test_connection_executeAsync.js and test_statement_executeAsync.js failing frequently (fatal assertion)
...
Release on the calling thread so when the connections destructor is called, it
is not on the background thread.
r=asuth
2009-11-19 11:49:20 -08:00
Blair McBride
b954b9cae2
Bug 528076 - Unsafe LIKE warning wrongly references mozIStorageConnection::escapeStringForLIKE. r=sdwilsh
2009-11-14 10:15:12 +01:00
Shawn Wilsher
116173a4b7
Backout of bug 496019 and bug 526601 due to window build bustage.
2009-11-09 12:16:39 -08:00
Shawn Wilsher
5281dcc164
Bustage fix for windows.
2009-11-09 10:35:26 -08:00
Shawn Wilsher
e6c35ff3f0
Bug 496019 - mozilla::storage::Connection::Close can spin a nested event loop
...
Creates a new close method that must be used when using asynchronous statements,
and disallow Close from being called in that case.
r=asuth
sr=vlad
2009-11-09 09:58:34 -08:00
Saint Wesonga
fe1b96674d
Bug 479730 - mozStorageConnection::Close logs closing improperly. r=vlad
2009-11-05 14:52:55 +01:00
David Dahl
e55bd8baf9
Bug 524787 - crash [@mozStorageResultSet::GetNextRow(mozIStorageRow**) ]. r=sdwilsh
2009-10-31 11:38:31 +01:00
Ginn Chen
6a61d86670
Bug 522157 Make -D__FUNCTION__=__func__ global for Sun Studio on Solaris r=benjamin
2009-10-26 14:25:40 +08:00
L. David Baron
0e462f7e2d
Disable test_deadlock_detector for failing on OS X. (Bug 523378)
2009-10-20 20:26:04 -04:00
Marco Bonardo
e68c36ec27
Bug 519326 - Variant.h(152) : warning C4244: '=' : conversion from 'PRInt64' to 'PRInt32', possible loss of data. r=sdwilsh
2009-10-09 22:15:19 +02:00
Dietrich Ayala
b682a0bba3
Bug 419893 - sort out PGO-triggered bugs (r=ted)
...
--HG--
extra : rebase_source : 028cd891e11df11abf768107f64b1d6bca541dca
2009-10-08 11:01:13 -07:00
Robert O'Callahan
6b41eca841
Backed out changeset 59a6c227df86
2009-10-02 15:23:36 +10:00
Shawn Wilsher
168578cfbc
Bug 494828 - Stop using our own mutexes and use SQLite's where possible.
...
Part 2: Use the helper object in a few places where we had our own mutexes.
r=asuth
--HG--
extra : rebase_source : 3f2f703274df0405bc395191dec8f522e5aa4e40
2009-07-22 15:18:33 -07:00
Shawn Wilsher
e0356a19b4
Remove this test. It's not terribly useful (testing basic behavior of a
...
database which is covered by tests the SQLite group runs), and relies on a "bug"
that newer versions of SQLite fix. rs=mconnor
2009-09-30 14:38:43 -07:00
Shawn Wilsher
3d91db712f
Test only change to make tests clean up better by using the free profile directory given to us. No bug. r="duh, why didn't we do this sooner"
2009-09-30 14:17:06 -07:00
Paul O’Shannessy
5b3c2717f0
Bug 518440 - Deprecate mozIStorageStatementWrapper & mozIStorageStatement.step() in IDL. r=sdwilsh
...
--HG--
extra : rebase_source : 0ede87a6eb9a34475d9efafa433809e571a104d3
2009-09-25 15:32:21 -07:00
Shawn Wilsher
3889b768e7
Bug 507674 - Safer protection of AsyncExecuteStatements::mState and AsyncExecuteStatements::mCancelRequested
...
This is essentially a backout of bug 506805, followed by changing the locking
protection rules to only protect mCancelRequested writing on the calling thread,
and reading on the background thread.
--HG--
extra : rebase_source : 249a61e40c2fd140527f034e36e8c1a53518baac
2009-09-02 13:30:24 -07:00
Shawn Wilsher
7e79575c8f
Bug 507199 - Fix race condition in finalizing asynchronous storage statements
...
(was "test_browserGlue_corrupt_nobackup_default.js, test_browserGlue_corrupt_nobackup.js, test_browserGlue_shutdown.js randomly crash")
Fixes a race condition with asynchronous statements that causes a crash. We do
not always have access to the background thread, so we should not assume we
always can get it.
2009-08-25 23:54:56 -07:00
Benjamin Smedberg
2e9438fd2f
Followup to bug 398573 - remove REQUIRES from the tree since it is no longer used... automatically generated patch, rs=ted
2009-08-25 08:59:31 -07:00
Ginn Chen
40156e2b51
Bug 507978 test_deadlock_detector.cpp failed to compile on Solaris r=bsmedberg
2009-08-11 14:56:58 +08:00
Jacek Caban
1f66701ce7
Bug 505734 - mozStorageStatementParams.cpp compilation fails on MinGW. r=sdwilsh
2009-08-09 22:30:38 +02:00
Akshay Gupta
fea6ebf827
Bug 433456 - mozIStorageFunction should be a [function]; r=sdwilsh
2009-08-06 20:00:39 +02:00
Shawn Wilsher
11b33f0ab8
Bug 506805 - Remove locking in AsyncExecuteStatements
...
This removes the use of the shared mutex in AsyncExecuteStatements. We now rely
on PR_AtomicSet and the volatile keyword. This results in zero lock contention
between the calling thread and the background thread if cancel is ever called.
r=asuth
r=bent
sr=vlad
2009-07-29 17:24:50 -07:00
Shawn Wilsher
9981a52b9b
Bug 506959 - AsyncExecuteStatements assumes ms, but calls functions that assume microseconds
...
This fixes the code to use functions that expect milliseconds instead of
microseconds, and updates to use the new TimeStamp and TimeDuration class.
r=asuth
2009-07-28 13:18:10 -07:00
Shawn Wilsher
463b989609
Bug 506022 - Avoid obtaining the database mutex at all costs in Connection::ExecuteAsync
...
Stop calling any SQLite functions that would acquire the database mutex inside
Connection::ExecuteAsync. Additionally, do not actually bind parameters when
the binding functions are called, but rather when we execute (so for async
statements, that will happen on the background thread creating no mutex
contention with the main thread).
r=asuth
2009-07-28 10:21:03 -07:00
Shawn Wilsher
3e9850b9ff
Merge places to mozilla-central.
2009-07-27 08:50:26 -07:00
Curtis Bartley
1192731c18
Bug 498938 - Add Levenshtein Edit Distance function to Sqlite so we can use it in queries. r=sdwilsh sr=vlad
2009-07-24 11:39:34 -04:00
Shawn Wilsher
1515fe6be7
Merge places to mozilla-central.
2009-07-23 13:10:26 -07:00
Shawn Wilsher
7a0b8db179
Merge places to mozilla-central.
2009-07-23 07:58:59 -07:00
timeless@mozdev.org
ecebe2a338
Bug 491196 don't implement static functions in headers
...
r=sdwilsh
Moving JSValStorageStatementBinder to mozStoragePrivateHelpers as bindJSValue
storage/src/mozStorageStatementParams.h: At global scope:
storage/src/mozStorageStatementParams.h:78: warning: ‘PRBool mozilla::storage::JSValStorageStatementBinder(JSContext*, mozIStorageStatement*, int, jsval)’ defined but not used
storage/src/mozStorageStatementParams.h:78: warning: ‘PRBool mozilla::storage::JSValStorageStatementBinder(JSContext*, mozIStorageStatement*, int, jsval)’ defined but not used
You get this once for each file that includes a header that defines a static function which is not used in that file.
2009-07-22 17:31:03 -05:00
Shawn Wilsher
2681223754
Bug 505550 - Acquire the db's mutex when cloning statements in Connection::ExecuteAsync
...
Hold the lock around all our API calls so we don't lose so much to the
background thread.
r=asuth
2009-07-22 15:18:33 -07:00
Shawn Wilsher
c61e6f67fa
Bug 494828 - Stop using our own mutexes and use SQLite's where possible.
...
Part 2: Use the helper object in a few places where we had our own mutexes.
r=asuth
2009-07-22 15:18:33 -07:00
Shawn Wilsher
dfa9ebd065
Bug 494828 - Stop using our own mutexes and use SQLite's where possible.
...
Part 1: Create helper objects to make using sqlite3_mutex safer and easier.
r=cjones
--HG--
rename : xpcom/tests/TestDeadlockDetector.cpp => storage/test/test_deadlock_detector.cpp
2009-07-22 15:18:33 -07:00
Shawn Wilsher
5fcdac946b
Backout of bug 494828 and bug 505550 due to orange.
2009-07-23 10:34:54 -07:00
Benjamin Smedberg
266f5b1dec
Fix bustage again from bug 494828 by linking against libxpcomglue_s like we were, but continue to link against libxpcom_core also.
2009-07-23 12:18:12 -04:00
Benjamin Smedberg
fa3ab235cc
Fix bustage from bug 494828 by linking against libxpcom_core.so for tracemalloc symbols.
2009-07-23 11:42:32 -04:00
Shawn Wilsher
6631ab6c3b
Bug 505550 - Acquire the db's mutex when cloning statements in Connection::ExecuteAsync
...
Hold the lock around all our API calls so we don't lose so much to the
background thread.
r=asuth
2009-07-22 15:18:33 -07:00
Shawn Wilsher
5a66fb8a7c
Bug 494828 - Stop using our own mutexes and use SQLite's where possible.
...
Part 2: Use the helper object in a few places where we had our own mutexes.
r=asuth
2009-07-22 15:18:33 -07:00
Shawn Wilsher
2d8562eff5
Bug 494828 - Stop using our own mutexes and use SQLite's where possible.
...
Part 1: Create helper objects to make using sqlite3_mutex safer and easier.
r=cjones
2009-07-22 15:18:33 -07:00
Shawn Wilsher
0c008743cf
Merge places to mozilla-central.
2009-07-19 18:21:55 -07:00
Shawn Wilsher
c2762f99e9
Bug 455555 - Use asynchronous queries for places AutoComplete.
...
This changes the location bar's AutoComplete provider to use asynchronous
queries instead of synchronous ones. No more blocking the main thread FTW!
r=mak
r=Mardak
r=dietrich
2009-07-13 12:19:03 -07:00
Drew Willcoxon
c57a0f0e22
Bug 499990 - Locale-aware collation, r=sdwilsh, sr=vladimir
2009-07-15 10:49:05 -07:00
Makoto Kato
87c3734112
Bug 499268 - storage code for Symbian emulator. r=sdwilsh
2009-06-29 14:42:56 +09:00
Shailen
0b82990ec8
Bug 497823. Fix compilation errors in Stroage on AIX. r=sdwilsh
...
--HG--
extra : rebase_source : 58bdecd2cec8b9a39be37514fa2465015addec42
2009-06-29 10:59:40 +12:00
Shawn Wilsher
7d25df6c45
Bug 500750 - mDBConn is not set to NULL in release builds
...
r=asuth
2009-06-26 15:03:53 -07:00
Drew Willcoxon
010916bdb4
Bug 490867 - Variant fixes: coerce null to empty string, GetIsNull should check correct type, variant base type should be void, r=sdwilsh
...
Adds a NullVariant derived class of Variant_base.
2009-06-24 15:04:49 -07:00
Shawn Wilsher
e6d9524f92
Test for bug 488148. r=asuth
2009-06-24 10:10:52 -07:00
Shawn Wilsher
6cbf5ad014
Bug 490085 - Add ability to bind multiple sets of parameters and execute asynchronously
...
Improves the asynchronous API by allowing multiple parameters to be bound before
executing it. The statement is then executed with each set of parameters
asynchronously.
r=asuth
sr=vlad
2009-06-17 12:12:51 -07:00
Shawn Wilsher
1ef152638f
Bug 488148 - Share the mutex used by AsyncExecuteStatements on Connection
...
Greatly reduces the number of mutexes used when using the asynchronous storage
API.
r=bent
r=asuth
2009-06-17 12:12:43 -07:00
Shawn Wilsher
2c58e01641
Backed out changeset 0997bcc75daf (bug 488148). Silly me - this patch is wrong!
2009-06-19 12:21:44 -07:00
Shawn Wilsher
b85d50d660
Bug 488148 - Share the mutex used by AsyncExecuteStatements on Connection
...
Greatly reduces the number of mutexes used when using the asynchronous storage
API.
r=bent
r=asuth
2009-06-17 12:12:43 -07:00
Shawn Wilsher
93d750bc3e
Bug 485107 - Do not throw in NewResolve
...
This changeset makes sure that we allow for properties to be defined on the
prototype chain for the JS language helpers in storage.
r=bent
2009-06-11 13:18:58 -07:00
Shawn Wilsher
a95e844e10
imported patch storage.remove-statement-state-checks
2009-06-11 13:18:58 -07:00
Shawn Wilsher
e175c575c5
Bug 492139 - Expose the Variant publicly so consumers can also use it
...
Actually makes this usable to things outside of the storage module.
r=bsmedberg
--HG--
rename : storage/src/Variant.cpp => storage/src/Variant_inl.h
2009-06-11 13:18:58 -07:00
Benjamin Smedberg
3db35da3fd
Follow-up to bug 488175 with correct capitalization of makefile variable.
2009-05-19 11:20:20 -04:00
Benjamin Smedberg
bb1c33c4ea
Bug 488175 - flatten dist/include and provide mechanism to install certain headers in namespaced subdirectories (e.g. #include "mozilla/XPCOM.h") r=ted
...
--HG--
rename : xpcom/ds/nsTimeStamp.cpp => xpcom/ds/TimeStamp.cpp
rename : xpcom/ds/nsTimeStamp.h => xpcom/ds/TimeStamp.h
2009-05-18 14:15:05 -04:00
Shawn Wilsher
385f2d5ef4
Bug 489481 - Get C++ tests for our C++ helper classes
...
This gets rid of the old, unused native code test file for storage. It adds two
more test files which test our C++ helper classes to ensure that they behave as
advertised. Also fixes a bug found in mozStorageTransaction that was uncovered
while writing these tests.
r=asuth
2009-05-13 12:53:57 -04:00
Shawn Wilsher
50a1970205
Bug 490833 - mozIStorageStatement::getParameterIndex should only accept :-named parameters
...
This makes getParameterIndex only work properly with :-named parameters. This
simplifies the work callers actually have to do.
r=asuth
2009-05-08 20:29:57 -04:00
Shawn Wilsher
5a70a49dbf
Bug 492139 - Expose the Variant publicly so consumers can also use it
...
This exposes the templated nsIVariant implementation that storage uses
internally so that consumers can use it as well.
r=bsmedberg
--HG--
rename : storage/src/mozStorageVariant.cpp => storage/src/Variant.cpp
rename : storage/src/mozStorageVariant.h => storage/src/Variant.h
2009-05-12 17:08:49 -04:00
Shawn Wilsher
b6c8d54bc7
Backed out changeset b6f09258a505 (bug 490833).
2009-05-08 19:57:37 -07:00
Shawn Wilsher
fa30ee0fe3
Bug 490833 - mozIStorageStatement::getParameterIndex should only accept :-named parameters
...
This makes getParameterIndex only work properly with :-named parameters. This
simplifies the work callers actually have to do.
r=asuth
2009-05-08 20:29:57 -04:00
Shawn Wilsher
72e0d71c7b
Bug 490084 - Add support for arrays in variantToSQLiteT
...
This adds support for blobs in variantToSQLiteT which means that functions can
no return blobs, as well as future consumers of variantToSQLiteT.
r=asuth
2009-05-08 20:29:57 -04:00
Shawn Wilsher
ef64e27404
Bug 490083 - Refactor VariantToSQLite3Result to be more abstract
...
This refactors this refactors a method currently only used by the Connection
object to be more abstract so we can use it in future work.
r=asuth
2009-05-08 20:29:57 -04:00
Shawn Wilsher
97575b6578
Bug 489702 - Update mozStorageStatement.* to follow style guidelines
...
Consistent spacing, consistent naming, and namespaces - OH MY!
r=asuth
2009-05-08 20:29:56 -04:00