Re: I'm having a crashing problem with FreeTDS under OSX

Daniel Parnell <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <[email protected]>
Hi James,

I uncompressed a fresh copy of FreeTDS and ran the odbc unit tests, 10  
of which failed, although I suspect most of them could be because of  
SQL Server 2008.
There were two bus errors however.

Please find attached a copy of the output

I also had a poke around with nm and as far as I can see everything  
should be working correctly.
There isn't anything obviously wrong that I can see.

Incidentally I'm running ruby 1.8.6 (Enterprise Ruby actually).   
Initially I tried using the build in ruby that comes with OS X and  
when I got problems I thought I'd somehow messed up the OS X ruby  
installation.

The really bizarre thing is that I've set up 5 or so Macs over the  
last couple of years and never hit anything like this.
Still, it's working now...

Daniel



On 09/03/2009, at 7:13 AM, James K. Lowden wrote:

> Frediano Ziglio wrote:
>> Reading at
>> http://developer.apple.com/documentation/Darwin/Reference/Manpages/man3/asprintf.3.html
>> it seems that same problem apply also to asprintf/vasprintf. They
>> returns pointers malloc-ed with libc but if free is not from libc you
>> get heap corruption.
>
> There is only one free(3) in OS X.  I don't find anything in the  
> pages you
> linked to that say anything else.
>
> I do not think there is a fundamental problem with FreeTDS or malloc/ 
> free
> on OS X.  I use FreeTDS on OS X without problems.  Others do too, or  
> we'd
> have lots of problem reports.
>
> Daniel is using Ruby, which is written in C.  I downloaded
> ruby-1.9.1-p0.tar.gz and checked the sources with cscope.  And guess  
> what?
> It manages its own heap.  See YYMALLOC and e.g. rb_parser_malloc().   
> And
> look at this:
>
> include/ruby/util.h:#define strdup(s) ruby_strdup(s)
>
> Looks suspicious to me.
>
> Daniel, I have a few suggestions for you.
>
> 1.  Do the ODBC unit tests work?  bsqlodbc?  If, as I expect, these
> programs work, the problem is related to Ruby somehow.
>
> 2.  Use nm(1) to see if libtdsobdc references ruby_strdup or  
> similar.  If
> so, figure out why.  Perhaps the Ruby ODBC framework includes the Ruby
> util.h before building the driver.
>
> 3.  OS X has a rich array of environment variables for tracking heap
> allocations.  See also leaks(1) and malloc_history(1).   
> MallocStackLogging
> appears to be your friend here.
>
> 4.  Set a breakpoint  in gdb where strdup is called, and trace into  
> the
> call.  See if you land in libc.  See what the malloc debugging tools  
> say
> before and after the call.
> While it was a useful diagnostic tool, I emphatically do not think you
> need tds_strdup().  The important thing to do is to figure out why  
> strdup
> is returning a pointer that free(3) doesn't recognize.  .
>
> HTH.
>
> --jkl
> _______________________________________________
> FreeTDS mailing list
> [email protected]
> http://lists.ibiblio.org/mailman/listinfo/freetds

_______________________________________________
FreeTDS mailing list
[email protected]
http://lists.ibiblio.org/mailman/listinfo/freetds
check.out.gz (application/x-gzip, 8 KB) - not displayed
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.