samba shares access issue in Solaris from a MT program

David Collier-Brown davec-b at rogers.com
Tue Sep 28 15:32:17 GMT 2004


   Just a followup to this fix for the team:  in the discussion
below, we've used the Solaris cc option "-mt" as a short form.
Setting it does two things:
	it sets -D_REENTRANT on the compiler command line
	it adds -lthread to the library list
   Setting -D_REENTRANT causes a number of small changes to
support reentrant and/or threaded code, the relevant part
being defining errno to be ___errno(), the thread-safe
errno function.

   So in principle, all that needs to change is the generated
make line for libsmbclient.so, from

---
bin/libsmbclient.so: $(LIBSMBCLIENT_PICOBJS)
	@echo Linking libsmbclient shared library $@
	@$(SHLD) $(LDSHFLAGS) -o $@ $(LIBSMBCLIENT_PICOBJS) \
		$(LDFLAGS) $(DYNEXP) $(LIBS) \
           	$(KRB5LIBS) $(LDAP_LIBS) \
		-h `basename $@`.$(LIBSMBCLIENT_MAJOR)

to
---
bin/libsmbclient.so: $(LIBSMBCLIENT_PICOBJS)
	@echo Linking libsmbclient shared library $@
	@$(SHLD) $(LDSHFLAGS) -D_REENTRANT \
		-o $@ $(LIBSMBCLIENT_PICOBJS) \
		$(LDFLAGS) $(DYNEXP) $(LIBS) \
           	$(KRB5LIBS) $(LDAP_LIBS) -lthread \
		-h `basename $@`.$(LIBSMBCLIENT_MAJOR)

... for Solaris versions up to 9. On Solaris 10, you don't
need to add -lthread, as it was folded into the standard
c library.

   Who's the configure guru on the team? (:-))

--dave

David Collier-Brown wrote:
> On Fri, 24 Sep 2004, Narayana Pattipati wrote:
> 
>> [Nice description of problem redacted.]
>>
>>
>>> If samba is build with "-mt" flags, then the errno will be pointed
>>> to __errno() macro, instead of global errno, and thread executing samba
>>> code will be able to access correct errno.
>>>
>>> I have few open questions based on this:
>>> a) I read from samba site that its not MT safe. But since the code 
>>> runs in
>>>   one thread only, is it OK to build samba with "-mt" compiler flags ?
>>>   What would be the side effects if samba is build with -mt compiler
>>>   flags ?
> 
> 
> 
> Richard Sharpe wrote:D>
> 
>> I cannot see any problems with this, off my head.
> 
> 
>     From my experience with the compiler/linkers
>     on Sun, the only substantiative change is the
>     use of a thread-aware errno mechanism. If the
>     program is unthreaded, the errno will work
>     normally even with -mt specified.
> 
>     Of course, it is the responsibility of the
>     caller to protect the library against concurrent
>     calls via locking, but that and -mt are what
>     we've used in the past to make non-thread-safe
>     libraries usable.
> 
>     I'd like to suggest that the configure script
>     be changed to add -mt to the solaris linker
>     options for Solaris (only).
>     
> --dave
> ps: would you like this submitted via bugzilla,for your records?
> -- 
> David Collier-Brown,  | Always do right. This will gratify
> davecb at spamcop.net    | some people and astonish the rest
>                       |                      -- Mark Twain
> 
> 




More information about the samba-technical mailing list