Thread overview
SegFault with HibernateD
Jan 12
Venkat
Jan 13
Venkat
Jan 13
Venkat
Jan 13
Venkat
Jan 13
Venkat
Jan 15
Venkat
January 12
I get a SegFault with the main method below which uses HibernateD . The second main method which uses ddbc just works fine. What is wrong with the first main method ? I have attached the error at the bottom although I don't think it says much.

This method uses HibernateD

int main() {
	// setup DB connection
	string url = MySQLDriver.generateUrl("localhost", 3306, "test");
	string[string] params = MySQLDriver.setUserAndPassword("test", "test");
	DataSource ds = new ConnectionPoolDataSourceImpl(new MySQLDriver(), url, params);

	// create metadata from annotations
	EntityMetaData schema = new SchemaInfoImpl!(Preferences);

	// create session factory
	Dialect dialect = new MySQLDialect();
	SessionFactory factory = new SessionFactoryImpl(schema, dialect, ds);
	scope(exit) factory.close();
	
	auto conn = ds.getConnection();
	scope(exit) conn.close();
	
	// create session
	Session sess = factory.openSession();
	scope(exit) sess.close();

	Query q = sess.createQuery("select p from Preferences p");
	Preferences[] list = q.list!Preferences();

	return 0;
}

The method below uses ddbc.

int main(string[] args) {

    string url = "mysql://localhost:3306/test?user=test,password=test";

    // creating Connection
    auto conn = createConnection(url);
    scope(exit) conn.close();

    // creating Statement
    auto stmt = conn.createStatement();
    scope(exit) stmt.close();

    // reading DB
    auto rs = stmt.executeQuery("SELECT * FROM preferences_wm ORDER BY id");
    writeln(rs.getFetchSize());
    return 0;
}


This is the error.

Running ./bin/hibernated-test
Program exited with code -11
Full exception: object.Exception@source/dub/generators/build.d(530): Program exited with code -11
----------------
/home/vagrant/old-dmd/dmd2/linux/bin64/../../src/phobos/std/exception.d:420 pure @safe void std.exception.bailOut!(Exception).bailOut(immutable(char)[], ulong, const(char[])) [0x8d036c]
/home/vagrant/old-dmd/dmd2/linux/bin64/../../src/phobos/std/exception.d:388 pure @safe bool std.exception.enforce!(Exception, bool).enforce(bool, lazy const(char)[], immutable(char)[], ulong) [0x8defcd]
source/dub/generators/build.d:530 void dub.generators.build.BuildGenerator.runTarget(dub.internal.vibecompat.inet.path.Path, const(dub.compilers.buildsettings.BuildSettings), immutable(char)[][], dub.generators.generator.GeneratorSettings) [0x97b1c9]
source/dub/generators/build.d:110 void dub.generators.build.BuildGenerator.performPostGenerateActions(dub.generators.generator.GeneratorSettings, const(dub.generators.generator.ProjectGenerator.TargetInfo[immutable(char)[]])) [0x977541]
source/dub/generators/generator.d:118 void dub.generators.generator.ProjectGenerator.generate(dub.generators.generator.GeneratorSettings) [0x9805a0]
source/dub/dub.d:494 void dub.dub.Dub.generateProject(immutable(char)[], dub.generators.generator.GeneratorSettings) [0x8918e0]
source/dub/commandline.d:789 int dub.commandline.GenerateCommand.execute(dub.dub.Dub, immutable(char)[][], immutable(char)[][]) [0x857579]
source/dub/commandline.d:821 int dub.commandline.BuildCommand.execute(dub.dub.Dub, immutable(char)[][], immutable(char)[][]) [0x857913]
source/dub/commandline.d:849 int dub.commandline.RunCommand.execute(dub.dub.Dub, immutable(char)[][], immutable(char)[][]) [0x857b23]
source/dub/commandline.d:239 int dub.commandline.runDubCommandLine(immutable(char)[][]) [0x853647]
source/app.d:14 _Dmain [0x84fc27]

January 12
On Friday, 12 January 2018 at 05:24:52 UTC, Venkat wrote:
> I get a SegFault with the main method below which uses HibernateD . The second main method which uses ddbc just works fine. What is wrong with the first main method ? I have attached the error at the bottom although I don't think it says much.

>
> This is the error.

> object.Exception@source/dub/generators/build.d(530): Program

It says enough to know that the exception is being thrown from dub and not your program. You program is never executed because dub throws the exception before it gets that far. You should report this at the dub repository: https://github.com/dlang/dub/issues
January 12
On Friday, 12 January 2018 at 07:33:37 UTC, Mike Parker wrote:
> On Friday, 12 January 2018 at 05:24:52 UTC, Venkat wrote:
>> I get a SegFault with the main method below which uses HibernateD . The second main method which uses ddbc just works fine. What is wrong with the first main method ? I have attached the error at the bottom although I don't think it says much.
>
>>
>> This is the error.
>
>> object.Exception@source/dub/generators/build.d(530): Program
>
> It says enough to know that the exception is being thrown from dub and not your program. You program is never executed because dub throws the exception before it gets that far. You should report this at the dub repository: https://github.com/dlang/dub/issues

It looks to me like the program is being run through dub, and dub is just reporting the program's exit code.

Hard to guess what the issue is, I'd attach a debugger to see where it crashes.
January 12
On Friday, 12 January 2018 at 08:55:13 UTC, Rene Zwanenburg wrote:
>
> It looks to me like the program is being run through dub, and dub is just reporting the program's exit code.
>

I see now. I glossed right over that execution output. On Windows, I don't recall ever seeing a dub exception from dub from a segfault. Just checked by accessing a null pointer and there's nothing thrown from dub. Is that a Linux thing?
January 13
On Friday, 12 January 2018 at 12:41:34 UTC, Mike Parker wrote:
>
> I see now. I glossed right over that execution output. On Windows, I don't recall ever seeing a dub exception from dub from a segfault. Just checked by accessing a null pointer and there's nothing thrown from dub. Is that a Linux thing?

 Thankyou for the reply. Yes I am running the app on Linux. I will report the issue.


January 13
On Friday, 12 January 2018 at 08:55:13 UTC, Rene Zwanenburg wrote:
> Hard to guess what the issue is, I'd attach a debugger to see where it crashes.

It fails at the sql() method in Command struct in mysql-native-1.1.4/mysql-native/source/mysql/commands.d. This is what gdb says when I do a disp _sql.

1: _sql = <error: Cannot access memory at address 0x8>

I'm sorry I am new to systems programming, would that mean _sql is null ?



January 13
I think there is a bug with PreparedStatement class in HibernateD. ddbc fails when I use a PreparedStatement. The code below shows that. I will create an issue with HibernateD.


int main(string[] args) {

    string url = "mysql://localhost:3306/webmarx?user=webmarx_dev,password=webm@rx";

    // creating Connection
    auto conn = createConnection(url);
    scope(exit) conn.close();

    // creating Statement
    auto stmt = conn.createStatement();
    scope(exit) stmt.close();

     PreparedStatement prepStatement = conn.prepareStatement("SELECT * FROM preferences_wm ORDER BY id");
     scope(exit) prepStatement.close();
     ResultSet rs = prepStatement.executeQuery();

    writeln(rs.getFetchSize());
    return 0;
}
January 13
Sorry about all these posts. Wish there were an edit button. I meant PreparedStatement in mysqlddbc driver, not HibernateD.
January 12
On 01/12/2018 06:50 PM, Venkat wrote:
> Sorry about all these posts. Wish there were an edit button.

That's ok. :) These are actually newsgroups (see NNTP protocol). Newsgroups don't have any edit functionality. The "forum" is just a web interface to newsgroups.

Ali

January 15
On Saturday, 13 January 2018 at 06:18:43 UTC, Ali Çehreli wrote:
> On 01/12/2018 06:50 PM, Venkat wrote:
> > Sorry about all these posts. Wish there were an edit button.
>
> That's ok. :) These are actually newsgroups (see NNTP protocol). Newsgroups don't have any edit functionality. The "forum" is just a web interface to newsgroups.
>
> Ali

Oh! ok, that makes sense. TY.